C指针地址的细微差别

时间:2013-04-06 00:07:19

标签: c pointers bit

有什么区别:

*((uint32_t*)(p) + 4);
*(uint32_t*)(p+4);

或者价值是否存在差异?

我的直觉是,在后面的例子中,值从p指向的数组的第4个索引开始,从索引4开始占用前4个字节。而在第一个例子中,每4个索引需要一个字节。这种直觉是否正确?

1 个答案:

答案 0 :(得分:2)

p+4表达式通过将4*sizeof(*p)个字节添加到p的值来计算地址。如果*p的大小与uint32_t的大小相同,则这两个表达式的结果之间没有差异。

鉴于此

  

p是一个int指针

并假设您的系统上的int是32位,您的两个表达式会产生相同的结果。