【发布时间】:2022-07-31 18:14:38
【问题描述】:
int a;
(&a+1) -&a: 1
(char*)(&a+1) -(char*)&a: 4
您能否解释一下为什么我们在进行 (char *) 转换时得到了不同的结果?
我编译了代码,发现转换前后的地址是一样的。但是当我们做算术时,我们会得到不同的结果。为什么? &a: 1283454684 &a+1: 1283454688 (char*)&a: 1283454684 (char*)(&a+1): 1283454688
【问题讨论】:
-
具有讽刺意味的是,这个问题的答案是 in the tag info itself 用于指针算术标记。
-
对我来说这个问题有点不清楚,但我认为答案是:当你增加(也就是加 1)指向类型 T 的指针时,地址会增加类型 T 的大小。所以如果 T 是 char 则地址也增加 1 但如果 T 是 int 则地址增加
sizeof(int)在大多数系统上为 4。这允许您使用*(base + index)访问 T 数组以访问元素index
标签: c pointers pointer-arithmetic