指针和类型转换

时间:2016-07-07 16:11:32

标签: c pointers casting type-conversion

对错: 以下分配有效:

#define GIMME *(unsigned int**) 0x3000 
unsigned short d = 42; 
GIMME = &d;

这是假的,虽然我无法理解为什么。我最近将Java格式转换为C语言,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:3)

代码正在尝试两件可疑的事情:

  1. 将数据分配给某些未知有效的位置(3000)。

    *(unsigned int**) 0x3000  = &d;
    
  2. 尝试分配不兼容的类型。对齐可能会失败,因为unsigned short可能比unsigned int更窄。 IOW,2种可能具有不同的最小对齐要求。

  3.   

    指向对象类型的指针可以转换为指向不同对象类型的指针。如果生成的指针未针对引用的类型正确对齐,则行为未定义。 C11§6.3.2.37

        // similar simplified example
        unsigned short d = 42; 
        unsigned int* gimme;
        gimme = &d;  // warning: assignment from incompatible pointer type