我遇到了一个输出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],其值首先为2,因此增加2。因此,我希望输出为4。 但实际输出为5。有人解释吗?
答案 0 :(得分:3)
<%@ page trimDirectiveWhitespaces="true" %>
答案 1 :(得分:2)
首先,指针p
指向数组t
的开头。所以应该像
p--
|
v
------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
------------------------------------------
现在通过
p += 2
p
是根据指针算法增加的值。这样p
现在指向3
。
p----------
|
v
------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
------------------------------------------
p[-1]
与*(p-1)
相同。即,地址p-1
上的值。此值为2
。
------ p[-1] or *(p-1)
|
|
------|-----------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
------------------------------------------
将2
添加到p
的当前值之后,p
现在将指向5
。
p------------------
|
v
------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
------------------------------------------
因此,当您打印*p
的值时,将输出5
。