所以我正在读一本关于 C 的书,遇到了一段我无法完全理解的代码,所以我决定运行它并亲自看看结果。基本上,我理解数组变量的作用类似于指针,例如,它指向数组的第一个元素。
char quote[]="This is a nice cookie!"
这里的 quote 是一个数组变量,基本上是一个指向数组第一个元素的指针,即字母 T(希望到目前为止我是正确的)。
在此基础上,当我编写下面的代码时,我理解了以下几点。
- 在声明时,参赛者是一个包含 3 个成员的数组 - 1、2 和 3
- 然后我使用 *choice 作为数组变量,换句话说,它是指向数组参赛者的第一个元素的指针 - 现在是 (1)。
现在我开始为参赛者数组的成员动态分配值。
参赛者[2]=*选择
将值 0 放入数组的第三个成员中,即: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;
}
最佳答案
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。
关于c - 使用指针变量分配数组元素值时,第三个数组元素不会打印出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24014353/