使用int指针来保存int类型数组的地址及其索引值误解

时间:2017-02-05 14:02:00

标签: c pointers

我正在研究C中的一些基础知识,我在理解指针时遇到很大问题,至少在某种程度上我猜是这样。

这是一本书中的一个例子,但它没有解释为什么在这种情况下它是如何的。所以:

int contestants[] = { 1, 2, 3 };
int *choice = contestants;
contestants[0] = 2;
contestants[1] = contestants[2];
//contestants[2] = *choice;
printf("%d\n", *(choice));
printf("%d\n", choice[0]);
printf("I'm going to pick contestant number %i\n", contestants[2]);

我的问题是,如果我取消注释上述行,它会给我一个2而不是3(最后printf)的值。基本上,注释行是我抓住这条非常简单的线条的约束,显然。感谢

2 个答案:

答案 0 :(得分:3)

int contestants[] = {1, 2, 3};
int *choice = contestants;

choice指向contestants

contestants[0] = 2;
contestants[1] = contestants[2];

contestants现在是2, 3, 3

*choice2

的第一个值
contestants[2] = *choice;

参赛者现在2, 3, 2

答案 1 :(得分:1)

因为choice指向contestants

contestants[0] = 2;

得到contestants 2的第一个值,因此*choice取消引用choice,它将指向contestants的开头,这是它的第一个元素并设置为2