我正在研究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
)的值。基本上,注释行是我抓住这条非常简单的线条的约束,显然。感谢
答案 0 :(得分:3)
int contestants[] = {1, 2, 3};
int *choice = contestants;
choice
指向contestants
contestants[0] = 2;
contestants[1] = contestants[2];
contestants
现在是2, 3, 3
*choice
是2
contestants[2] = *choice;
参赛者现在2, 3, 2
答案 1 :(得分:1)
因为choice
指向contestants
和
contestants[0] = 2;
得到contestants
2的第一个值,因此*choice
取消引用choice
,它将指向contestants
的开头,这是它的第一个元素并设置为2
。