所以这个表达式出现在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的新手,我在此表达式之前添加了相关代码。
因为q
是指针,所以表达式q+1
使用指针算术。这意味着q+1
指向q
之后的一个element,而不是q
之后的一个byte。
q
的类型是int *
,表示它指向int
。在您的平台上int
的大小很可能是4个字节,因此在int *
上加1实际上会将原始指针值加4,以便它指向数组中的下一个int
。