在C中的2D数组中将int转换为void

时间:2012-11-27 03:27:13

标签: c pointers casting

考虑到指针的大小变化,进行以下演员的安全性如何? (32/64位)是否会导致程序行为不正确?

#define APL 1
#define GRP 2

void *fruits[][2] = {
    {"Apples", (void *) APL},
    {"Grapes", (void *) GRP},
};

1 个答案:

答案 0 :(得分:0)

  

考虑指针的大小变化?

它不起作用,标准允许将整数转换为指针。

但是演员的结果是(除了评估为0的常量表达式)实现定义,并且可能不是指向内存的指针,您可以操作甚至读取。

  

是否会导致错误的程序行为?

如果您使用这些指针(例如,转换为其他指针类型并取消引用结果),则可能导致未定义的行为,并导致各种不良行为。