0
真或假: 以下分配有效:指針和類型轉換
#define GIMME *(unsigned int**) 0x3000
unsigned short d = 42;
GIMME = &d;
這是假的,雖然我無法理解爲什麼。我最近將Java轉移到C,所以任何幫助將不勝感激。
真或假: 以下分配有效:指針和類型轉換
#define GIMME *(unsigned int**) 0x3000
unsigned short d = 42;
GIMME = &d;
這是假的,雖然我無法理解爲什麼。我最近將Java轉移到C,所以任何幫助將不勝感激。
代碼嘗試2個可疑的東西:
分配數據一些位置(3000),其不知道是有效的。
*(unsigned int**) 0x3000 = &d;
試圖分配不兼容的類型。對齊可能失敗,因爲unsigned short
可能比unsigned int
更窄。 IOWs,這兩種類型可能有不同的最小對準要求。
一個指向對象類型可被轉換成一個指針到一個不同的對象類型。如果生成的指針未針對引用類型正確對齊,則行爲未定義。 C11§6.3.2.37
// similar simplified example
unsigned short d = 42;
unsigned int* gimme;
gimme = &d; // warning: assignment from incompatible pointer type
如何定義「有效」?如果這些行在函數定義中似乎是正確的。整數'0x3000'將以實現定義的方式轉換爲指針,'unsigned short'和'unsigned int'可能具有相同的對齊要求。 – MikeCAT
你想做什麼? –
這不是你正在尋找的代碼。取而代之的是一本好的C書。 – 2501