2016-06-23 2 views
1

Ich weiß, dass Arrays zum Zeiger zerfallen. Da es sich wie ein Zeiger verhält, kann es daher im Wesentlichen Funktionen mit Argumenten übergeben werden, die eine Speicheradresse ohne die Verwendung eines kaufmännischen Und-Zeichens erfordern. Zum Beispiel:Verfallen einzelne Array-Elemente zum Zeiger?

char name[10]; 
scanf("%s", name); 

ist korrekt.

aber lassen Sie uns sagen, wenn ich nur füllen wollen in das erste Element ‚name‘ Array, warum nicht kann ich schreibe es als

scanf("%c", name[0]); 

aber muss es vor 'mit dem Ampersand schreiben Name [0] '? Bedeutet dies, dass einzelne Array-Elemente nicht zu Zeigern zerfallen und nicht ihre individuelle Speicheradresse im Gegensatz zu ihrem gesamten Array-Gegenstück haben?

+3

Wie kann 'name [0]' kann auf Zeiger abfallen, wenn es den Wert des ersten Elements des Arrays zurückgibt ???? ... – LPs

+0

Ah Ich habe nie gedacht, dass Array-Elemente Rückgabewerte und nicht Speicheradresse und damit kein Zeiger als Erklärung. Vielen Dank! – TruthOrDare

+0

@TruthOrDare Vielleicht sollten Sie sich [Array of Pointers] ansehen (http://ideone.com/OgJtST) – Michi

Antwort

1

Arrays Zerfall zu dem ersten Element um Zeiger, wenn als Funktion Argument übergeben, nicht Array-Element (e).

Zitiert C11, Kapitel §6.3.2.1/p3, Lvalues, Arrays und Funktion Designatoren, (emphasis Mine)

Außer wenn es der Operand des sizeof Operator, der _Alignof Operator, oder der unären & Operator oder ein Stringliteral verwendet, um einen Array zu initialisieren, ein Ausdruck, die hat Typen ‚‘ Array vom Typ ‚‘ auf einen Ausdruck mit Typ umgewandelt wird '' Zeiger auf den Typ '', der auf das Anfangselement des Array-Objekts zeigt und kein Lvalue ist.

ein Array-Element nicht vom Typ Array ist, wobei die Anordnung variabel ist. Mit anderen Worten, ein Array-Name ist schließlich nicht dasselbe wie ein Array-Element (ny).

So einzelne Array-Elemente nicht Zerfall Zeiger-to-alles-at-all wenn auch als Funktionsargumente übergeben.

+0

Ich bin nur neugierig, verfällt 'Array' zu Pointer zu seinem ersten Element oder dem' Array-Namen' Verfall zum Zeiger? – Michi

1

Das Problem besteht darin, dass als char name[10]char* name verhalten kann, die für scanf ok ist, welche zweites Argument erwarten ein Zeiger (Adresse im Speicher) zu sein. Aber wenn Sie name[0] schreiben, erhalten Sie den Wert und nicht den Zeiger.

Zum Beispiel, wenn name"Hello world" ist, dann name[0] == 'H'. Aber scanf will einen Zeiger. Um die Adresse name[0] zu erhalten, müssen Sie scanf("%c", &name[0]) schreiben.

Verwandte Themen