使用指针变量分配数组元素值时,不会打印出第3个数组元素

时间:2014-06-03 11:45:30

标签: c arrays pointers

所以我正在读一本关于C的书,并且遇到了一段我无法完全理解的代码,所以我决定将它运行出来并亲自查看结果。基本上,我理解数组变量在某种意义上就像一个指针,它指向数组的第一个元素,例如。

char quote[]="This is a nice cookie!"

这里引用的是一个数组变量,它基本上是指向数组第一个元素的指针,即字母T(希望到目前为止我是正确的)。

在此基础上,当我编写下面的代码时,我理解以下几点。

  1. 在宣布时间,参赛者是一个阵容,其中有3名成员 - 1,2和3
  2. 然后我使用* choice作为数组变量,换句话说是指向数组参赛者的第一个元素的指针 - 现在是(1)。
  3. 现在我开始动态地为参赛者阵列的成员分配值。

    contestansts [2] = *选择

  4. 将值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;
    }
    

2 个答案:

答案 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。