所以我正在读一本关于C的书,并且遇到了一段我无法完全理解的代码,所以我决定将它运行出来并亲自查看结果。基本上,我理解数组变量在某种意义上就像一个指针,它指向数组的第一个元素,例如。
char quote[]="This is a nice cookie!"
这里引用的是一个数组变量,它基本上是指向数组第一个元素的指针,即字母T(希望到目前为止我是正确的)。
在此基础上,当我编写下面的代码时,我理解以下几点。
现在我开始动态地为参赛者阵列的成员分配值。
contestansts [2] = *选择
将值0放在数组的第3个成员中,即:contestants[2]
。
到目前为止,这么好。 现在,书中没有下一个for循环。我自己将它包含在代码中,以查看数组的元素。当我运行代码时,作为输出我得到 -
I will pick contestant number 2
The members of the array contestants are:
Member 0 has the value 2
Member 1 has the value 3
我的问题是 - 我不明白成员1的值是多少3.根据代码,成员1和2不应该具有相同的值(2)。
任何帮助都将受到高度赞赏。 我正在使用Sublime Text和Mac终端来运行它(如果需要的话)。
#include<stdio.h>
int main()
{
int contenstants[]={1,2,3};
int *choice=contenstants;
contenstants[0]= 2;
contenstants[1]=contenstants[2];
contenstants[2]=*choice;
printf("\n I will pick contestant number %i\n", contenstants[2] );
//Print array members
printf(" The members of the array Contenstants are:\n");
for(int i=0;i<contenstants[2];i++)
{
printf(" Member %i\t has the value %i\t", i, contenstants[i] );
printf("\n");
}
return 0;
}
答案 0 :(得分:2)
3
因为你正在做
contenstants[1]=contenstants[2];
然后contenstants[1]
稍后不会被修改,因此它具有值3
;
在评论中回答你的问题:
for循环中的条件不正确
--------------v not correct
for(int i=0;i<contenstants[2];i++)
你想要
for(int i=0;i<3;i++)
虽然使用硬编码3
也不是一个好主意。但它与你的其他代码一致。
答案 1 :(得分:2)
int contenstants[]={1,2,3};
int *choice=contenstants; // choice -> {1,2,3}
contenstants[0]= 2; // choice -> {2,2,3}
contenstants[1]=contenstants[2]; // choice -> {2,3,3}
contenstants[2]=*choice; // choice -> {2,3,2}
你得到的输出是完全合乎逻辑的!
在第一步中,您将值2分配给contenstants[0]
,这也是*choice
。
你在输出上只得到两个数字的原因是你循环for(int i=0;i<contenstants[2];i++)
,这相当于for(int i=0;i<2;i++)
,它循环遍历元素号0和元素号1。