我发现了一个输出5的程序。我不知道怎么做。请解释一下。
int main(void) {
int t[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, *p = t;
p += 2;
p += p[-1];
printf("\n%d",*p);
return 0;
}
我预计产量是4。
指针在这里从t[0]移动到t[2](p+=2;)。在下一个语句p+=p[-1]中,我相信指针会先移到t[1],t[1]的值是2,因此增加了2。所以我预计产量是4。
但实际产量是5。有人,请解释一下?
最佳答案
首先,指针指向数组的开头。所以应该是
p--
|
v
------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
------------------------------------------
现在
p += 2
p
是根据指针算法递增的。所以t
现在指向p
。p----------
|
v
------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
------------------------------------------
p
与3
相同。即,地址p[-1]
处的值。这个值是*(p-1)
。 ------ p[-1] or *(p-1)
|
|
------|-----------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
------------------------------------------
将
p-1
添加到2
的当前值后,2
现在将指向p
。p------------------
|
v
------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
------------------------------------------
因此,当您打印
p
的值时,5
将被输出。关于c - 以下程序输出为什么是5,而不是4?谁能解释?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55810204/