假设你有:
void *a = //some address;
*((int **)(char*)a) = 5
我不清楚第二行应该做什么......我知道'a'被转换为指向char的指针,然后最终转换为指向int的指针,但目前还不清楚是什么解除引用指向int实际上的指针的指针...
这将非常有帮助。感谢
答案 0 :(得分:7)
它将值5存储在“某个地址”中,但更确切地说,它是将值5加宽到机器地址大小,从“某个地址”开始的那些多个字节。
即G。如果它是64位机器,则将值0x0000000000000005存储在从“某个地址”开始的8个字节处
我不明白为什么它会以这么复杂的方式做到这一点,但是我们要判断一个程序员在漫长的一天结束时努力工作的意图。
答案 1 :(得分:1)
如果取消引用指向int的指针,您将获得指向int的指针。解除引用意味着你将获得它所指向的对象,在这种情况下是指向int的指针。
这是一篇有趣的文章,解释了how to interpret more complex declarations
答案 2 :(得分:0)
这是一种无意义的,混淆的写作方式:
void* a = (void*)5;
正如我们所知,原始代码没有任何意义。这是它的作用:
编辑:顺便说一句,请注意C中不允许使用隐式整数到指针强制转换(C996.5.4§3)。必须有像上面代码中的演员。