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