“赋值使得指针来自没有强制转换的整数”是什么意思?

时间:2011-10-17 07:20:31

标签: c pointers

早些时候,我问了一个类似的问题,但我已经改变了我的代码。现在编译器给了我一个不同的警告。这是我的代码现在的样子:

void *a = NULL;
void *b = //something;
a = *(int *)((char *)b + 4);

当我尝试编译时,我得到“警告:赋值从没有强制转换的整数中生成指针。”这是什么意思,我该怎么做才能解决它?

为了澄清,我不希望'a'指向比'b'大4个字节的地址(即,a!= b + 4)。在我的程序中,我知道存储在((char *)b + 4)的值本身就是另一个指针,我想将这个指针存储在'a'中。

2 个答案:

答案 0 :(得分:1)

因为,“存储在((char *)b + 4)的值本身就是另一个指针”,只需在结果中添加一个显式的强制转换:

void *a = NULL;
void *b = //something;
a = (void*)*(int *)((char *)b + 4);

由于你假设sizeof(void*)==sizeof(int),代码不可移植,但我相信你已经知道了。

便携式替代方法是使用intptr_t代替int

答案 1 :(得分:1)

因此,您想要加载到b+4的{​​{1}}存储指针值吗?然后将其视为一个,所以(b + 4)指向一个指针 - 指向int的指针的指针是a。:

int**