早些时候,我问了一个类似的问题,但我已经改变了我的代码。现在编译器给了我一个不同的警告。这是我的代码现在的样子:
void *a = NULL;
void *b = //something;
a = *(int *)((char *)b + 4);
当我尝试编译时,我得到“警告:赋值从没有强制转换的整数中生成指针。”这是什么意思,我该怎么做才能解决它?
为了澄清,我不希望'a'指向比'b'大4个字节的地址(即,a!= b + 4)。在我的程序中,我知道存储在((char *)b + 4)的值本身就是另一个指针,我想将这个指针存储在'a'中。
答案 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**