【发布时间】:2020-12-01 17:34:24
【问题描述】:
我有以下代码。
int a = 10, b = 20;
int *x, *y, *z;
int **pp;
int arr[3] = { 5, 13, 29 };
x = &b;
pp = &y;
y = arr + 1;
*y = a;
z = y;
**pp = 999;
y++;
printf("%i %i %i %i %i %i %i %i %i", a, b, *x, *y, *z, **pp, arr[0], arr[1], arr[2]);
我预计输出将是 10 20 20 29 10 999 5 999 29,但是,正确的输出似乎是 10 20 20 29 999 29 5 999 29。区别在于*z 和**pp。我不明白为什么会这样,即使我尝试绘制图表并逐步分析结果。为什么*z 和**pp 分别是999 和29,而不是10 和999?谢谢。
【问题讨论】:
-
pp = &y表示pp指向指针y。这意味着*p与y相同,**pp与*y相同。因此,在使用**pp的两个语句中,您可以将**pp更改为*y并得到相同的结果。
标签: arrays c pointers implicit-conversion pointer-arithmetic