C语言:当你取消引用“指向int的指针”时,应该返回什么?

时间:2011-10-18 07:43:56

标签: c pointers

假设你有:

    void *a = //some address;
    *((int **)(char*)a) = 5

我不清楚第二行应该做什么......我知道'a'被转换为指向char的指针,然后最终转换为指向int的指针,但目前还不清楚是什么解除引用指向int实际上的指针的指针...

这将非常有帮助。感谢

3 个答案:

答案 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;

正如我们所知,原始代码没有任何意义。这是它的作用:

  • 为a。
  • 分配地址
  • 从void指针到char指针的Typecast a。
  • 将指针指向指向int。
  • 的指针
  • 获取指向指针的内容,即应该存储int的地址。
  • 此地址将存储在当前存储其地址的位置,并使用地址5覆盖。

编辑:顺便说一句,请注意C中不允许使用隐式整数到指针强制转换(C996.5.4§3)。必须有像上面代码中的演员。