有什么区别:
*((uint32_t*)(p) + 4);
*(uint32_t*)(p+4);
或者价值是否存在差异?
我的直觉是,在后面的例子中,值从p指向的数组的第4个索引开始,从索引4开始占用前4个字节。而在第一个例子中,每4个索引需要一个字节。这种直觉是否正确?
答案 0 :(得分:2)
p+4
表达式通过将4*sizeof(*p)
个字节添加到p
的值来计算地址。如果*p
的大小与uint32_t
的大小相同,则这两个表达式的结果之间没有差异。
鉴于此
p
是一个int
指针
并假设您的系统上的int
是32位,您的两个表达式会产生相同的结果。