Lvalue требуется ошибка - PullRequest
       3

Lvalue требуется ошибка

8 голосов
/ 22 ноября 2011

Работая с указателями, я написал следующий код:

int main()
{
    int a[]={10,20,30,40,50};
    int i;
    for(i=0;i<5;i++)
    {
        printf("\n%d",*a);
        a++;
    }
    return 0;
}

Теперь, согласно моему пониманию, само имя массива - это адрес в c, и арифметика указателей здесь верна, насколько мне известно.Но когда я пытаюсь запустить код, он выдает ошибку «Lvalue Required».

Так в чем же точная причина возникновения ошибки Lvalue, потому что до этого я также сталкивался с ситуациями, когда эта ошибка существует.Во-вторых, почему в этом случае арифметика с указателем здесь недопустима?

Ответы [ 3 ]

5 голосов
/ 22 ноября 2011

Вы не можете сделать a++ для статического массива - который не является Lvalue. Вы должны сделать указатель вместо этого. Попробуйте это:

int *ptr = a;
int i;
for(i=0;i<5;i++)
{
    printf("\n%d",*ptr);
    ptr++;
}

Хотя в этом случае, вероятно, лучше просто использовать индекс:

int i;
for(i=0;i<5;i++)
{
    printf("\n%d",a[i]);
}
2 голосов
/ 22 ноября 2011

В большинстве случаев имя массива оценивается как значение, которое можно присвоить указателю, но это все же значение, а не фактический указатель.

Это аналог значения, скажем, 17. Вы можете взять значение 17 и присвоить его int. Как только вы это сделаете, вы можете увеличивать, уменьшать и иным образом манипулировать этим int. Однако вы ничего не можете сделать для самого 17 - это то, что есть, и его нельзя изменить.

Имя массива почти такое же. Он имеет правильный тип, чтобы иметь возможность назначать его указателю, но сам по себе это просто значение, которым вы не можете манипулировать. Если вы присваиваете это значение указателю, вы можете манипулировать указателем, но вы никогда не сможете многое сделать с самим исходным значением - оно такое, какое оно есть, и его нельзя изменить.

1 голос
/ 22 ноября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...