2016-07-07 95 views
0

真或假: 以下分配有效:指针和类型转换

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

这是假的,虽然我无法理解为什么。我最近将Java转移到C,所以任何帮助将不胜感激。

+3

如何定义“有效”?如果这些行在函数定义中似乎是正确的。整数'0x3000'将以实现定义的方式转换为指针,'unsigned short'和'unsigned int'可能具有相同的对齐要求。 – MikeCAT

+3

你想做什么? –

+2

这不是你正在寻找的代码。取而代之的是一本好的C书。 – 2501

回答

3

代码尝试2个可疑的东西:

  1. 分配数据一些位置(3000),其不知道是有效的。

    *(unsigned int**) 0x3000 = &d; 
    
  2. 试图分配不兼容的类型。对齐可能失败,因为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