对错: 以下分配有效:
#define GIMME *(unsigned int**) 0x3000
unsigned short d = 42;
GIMME = &d;
这是假的,虽然我无法理解为什么。我最近将Java格式转换为C语言,所以任何帮助都会受到赞赏。
答案 0 :(得分:3)
代码正在尝试两件可疑的事情:
将数据分配给某些未知有效的位置(3000)。
*(unsigned int**) 0x3000 = &d;
尝试分配不兼容的类型。对齐可能会失败,因为unsigned short
可能比unsigned int
更窄。 IOW,2种可能具有不同的最小对齐要求。
指向对象类型的指针可以转换为指向不同对象类型的指针。如果生成的指针未针对引用的类型正确对齐,则行为未定义。 C11§6.3.2.37
// similar simplified example
unsigned short d = 42;
unsigned int* gimme;
gimme = &d; // warning: assignment from incompatible pointer type