2016-06-02 27 views
1

Unten ist der Code den Code zum Kompilieren in Codeblöcke ich folgende Fehlermeldung:Zugriff auf Array-Elemente in c

1 value required as increment operator.

Jetzt weiß ich, dass arr++ nicht funktioniert, aber ich möchte wissen, warum.

#include<stdio.h> 
int main() 
{ 
    int arr[5]={1,2,3,4,5},i; 

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

Antwort

6

arr ++ funktioniert nicht, aber ich möchte wissen, warum?

arr speichert die Basisadresse, die &arr[0]daher weist arr immer in die Ausgangsposition des Arrays und nicht geändert werden kann. das ist der Grund, warum arr++ ungültig ist und nicht funktioniert.


Lösung:

Sie stattdessen arr mit Hilfe von * (Referenzierung Operator) Bediener die Array-Elemente

for(i=0;i<5;i++) 
{ 
    printf("%d\n",*(arr+i)); 
    //pointer arithmetic *(arr+i)=*(&arr[0]+i*sizeof(data_type_of_arr)) 
} 

hier verwenden können, um zu drucken Zeigerarithmetik ist hilfreich


oder auch, um zu verstehen, die Daten stattdessen verwenden, um den Index i auf diese Weise zu drucken:

for(i=0;i<5;i++) 
{ 
    printf("%d\n",arr[i]); 
} 

Eine weitere Möglichkeit, es zu tun ist betrachten ein neuer Zeiger auf &arr[0] und inkrementieren.

int *p=&arr[0]; 
for(i=0;i<5;i++) 
{ 
    printf("%d\n",*p); 
    p++; 
    //pointer arithmetic *(p)=*((&p)+1*sizeof(data_type_of_arr)) 
    //NOTE: address of p updates for every iteration 
} 

Für weitere Lesung zu Zeigerarithmetik: here

4

Während Arrays Zeiger auf ihr erstes Element des Zerfalls kann (was passiert, wenn man zum Beispiel *arr verwenden) ist es nicht ein Zeiger an sich ist.

Sie auch nicht einen Array ändern, ändern „Punkte“, wo es, das ist das, was mit arr++ falsch ist, ist es ungefähr die gleiche wie arr = arr + 1 und während arr + 1 wird die Zuordnung wieder zu arr erlaubt ist nicht möglich‘ t Ändern Sie den Speicherort eines Arrays.

Wenn Sie möchten, wie Sie tun, dann benötigen Sie einen tatsächlichen Zeiger, initialisieren Sie es auf den Speicherort des ersten Elements von arr zeigen, und verwenden Sie stattdessen den Zeiger in der Schleife.

-1

Sie können den Operator ++ nicht für Arrays verwenden. Array ist ein konstanter Zeiger auf Daten und kann nicht geändert werden.

+0

Als Alternative können Sie tyo Array über den Index zugreifen: arr [i] oder deklarieren Sie zusätzlichen Zeiger int * ptr = arr und inkrementieren/dekrementieren. –

0

Der Inkrementoperator auf dem Wert einer Variablen angewendet wird. Der Wert eines Arrays ist seine Elemente. Was würden Sie also vom Inkrement-Operator erwarten? Inkrement jedes Element im Array? Der Wert einer Zeigervariablen ist andererseits eine Adresse, so dass der Inkrementoperator hier gilt.

1
#include<stdio.h> 
int main() 
{ 
    int arr[5]={1,2,3,4,5},i; 

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

arr ++ funktioniert nicht. Ursache des Arrays ist konstanter Zeiger und Sie können die Adresse nicht erhöhen. Denken Sie immer daran, dass der Array-Name die Basisadresse darstellt. Wenn Sie inkrementieren möchten, dann geben Sie zusätzliche Argumente dafür an.Siehe das obige Beispiel.