2014-09-06 4 views
-4

Я думаю, что этот вопрос уже задан. Простите за это, но может кто-нибудь сказать мне, почему это неправильно.Я не понимаю, почему мой код не работает?

int a[]={10,20,30,45,50}; 
    int j; 
    for(j=0;j<=4;j++) 
    { 
      cout<<(*a); 
      a++; 
    } 

в порядке, так что если указатель в приведенной выше коде не может быть увеличено, то мой код ниже работает, Это просто потому, что указатель первым присваиваются переменным, а затем его увеличивается.

int var[] = {10, 100, 200}; 
    int i, *ptr; 
    //let us have array address in pointer 
    ptr = var; 
    for (i = 0; i < MAX; i++) 
    { 
    printf("Value of var[%d] = %d\n", i, *ptr); 
    // move to the next location 
    ptr++; 
    } 
+0

, что проблема, которую вы нашли. ..? –

+0

Ошибка «lvalue требуется как операнд приращения»? – CodeHacker

+0

что вы хотите выполнить ..? –

ответ

1

* a относится к первому элементу [], который равен 10. Вы получите ошибку компилятора в файле ++. Это связано с тем, что вы не можете увеличить значение a. * А постоянный указатель, указывающий на первый элемент [] и его адрес не может быть изменен ..

Это должно быть:

int a[]={10,20,30,45,50}; 
int j; 
for(j=0;j<=4;j++) 
{ 
    cout<<*(a+j); 
} 
+0

, но почему ошибка просто увеличивает или разыгрывает ее? – CodeHacker

+0

a - постоянный указатель ... его адрес не может быть изменен. – lakesh

+0

если мой ответ был полезен, отметьте его как право. – lakesh

1

Это не компилируется, потому что массивы не являются указателями:


С int arr[] = {...}:

  • Значения arr и &arr обязательно являются идентичными

  • arr указывает на действительный адрес памяти, но не может быть установлен, чтобы указать на другой адрес памяти


С int* ptr = ...:

  • Значения ptr и &ptr не обязательно идентичны (на самом деле, они в основном отличаются)

  • ptr может быть установлен, чтобы указать как действительные и недействительные адреса памяти, столько раз, сколько вы

Смежные вопросы