* (a ++) gibt Fehler, aber nicht * (a + 1) ?? Wo ist Array-Name?

7

Im folgenden Code:

%Vor%

Was ist der Unterschied zwischen Zeile 4 und Zeile 5. Ich bekomme keinen Fehler oder Warnung mit Zeile 5.

    
Dayal rai 09.05.2013, 06:59
quelle

3 Antworten

26

a ist ein Array-Objekt und kein Zeiger, sodass Sie die Operation a++ nicht verwenden können für ein Array-Objekt. weil dies äquivalent ist zu:

%Vor%

Hier ordnen Sie dem Array-Objekt einen neuen Wert zu, der in C nicht erlaubt ist.

a + 1 gibt einen Zeiger auf das Element 1 Ihres a -Arrays zurück und es ist erlaubt

    
MOHAMED 09.05.2013, 07:01
quelle
4

Okay, ernsthaft schlechte Programmierpraktiken: Lassen Sie uns zuerst Ihr Problem angehen:

%Vor%

kann nicht verwendet werden, weil a eine implizite Referenz auf das Array ist;

Sie können dies tun:

%Vor%

und los gehts ...

Auch *(a++) ist NICHT das gleiche wie *(a+1) , weil ++ versucht, den Operanden zu ändern, während + einfach einen Wert zum konstanten a -Wert hinzufügt.

    
Ahmed Masud 09.05.2013 07:14
quelle
3

'a' verhält sich wie ein const-Zeiger. 'a' kann seinen Wert oder die Adresse, auf die er zeigt, nicht ändern. Dies liegt daran, dass der Compiler Speicher der Größe des Arrays statisch zugewiesen hat und Sie die Adresse ändern, auf die verwiesen wird.

Sie können dies stattdessen wie folgt tun

%Vor%     
Shishir Gupta 09.05.2013 07:06
quelle

Tags und Links