为什么这个表达式在C中变成4?

问题描述 投票:1回答:1

所以这个表达式出现在4:

int a[] = {1,2,3,4,5}, i= 3, b,c,d;
int *p = &i, *q = a; 
char *format = "\n%d\n%d\n%d\n%d\n%d";
printf("%d",(long unsigned)(q+1) - (long unsigned)q);

我必须在家庭作业中解释它,我不知道为什么它会达到这种价值。我看到(长无符号)强制转换(q + 1),然后我们减去q所指的值是长无符号,我以为我们剩下1。为什么不是这种情况呢?

编辑:抱歉,我是StackOverflow的新手,我在此表达式之前添加了相关代码。

c
1个回答
1
投票

因为q是指针,所以表达式q+1使用指针算术。这意味着q+1指向q之后的一个element,而不是q之后的一个byte

q的类型是int *,表示它指向int。在您的平台上int的大小很可能是4个字节,因此在int *上加1实际上会将原始指针值加4,以便它指向数组中的下一个int

© www.soinside.com 2019 - 2024. All rights reserved.