Adresse des Zeigers auf ein Array

8

Unten ist ein Beispiel für ein zweidimensionales Array.

%Vor%

Wenn ich p = &s[0]; schreibe, gibt es keinen Fehler. Aber wenn ich p = s[0]; schreibe, gibt es einen Fehler, obwohl &s[0] und s[0] die gleiche Adresse geben.

Bitte lassen Sie mich wissen, warum es einen Unterschied gibt, obwohl beide dieselbe Adresse angeben.

    
user1782607 29.10.2012, 10:38
quelle

4 Antworten

13

Die Adressen sind gleich, aber die Typen sind unterschiedlich.

&s[0] hat den Typ int (*)[2] , aber s[0] hat den Typ int [2] und fällt auf int * .

Das Ergebnis ist, dass bei der Ausführung von Arithmetik in p das Muster, mit dem es über das Array läuft, von seinem Typ abhängt. Wenn Sie p = &s[0] und dann p[3][1] eingeben, greifen Sie auf s[3][1] zu. Wenn Sie andererseits int *q = s[0] schreiben, können Sie q nur verwenden, um auf das erste Subarray von s z. q[1] greift auf s[0][1] zu.

    
ecatmur 29.10.2012 10:43
quelle
0

Schließen, aber nicht ganz. s ist ein Zeiger auf das erste Element des Arrays. Es ist auch der Alias ​​für dieses Array - der Compiler weiß, dass er auf eine bestimmte Anzahl von Elementen zeigt.

Also gibt & amp; s [0] die Adresse des ersten Elements zurück, während s [0] das Element selbst zurückgibt.

* p ist jedoch nur ein Zeiger auf ein int. Es kann mehr Elemente als das sein, aber der Compiler weiß es nicht.

    
enhzflep 29.10.2012 10:46
quelle
-1

gcc würde eine Warnung anzeigen, wenn Sie versuchen, einem anderen Datentyp (int *) den Datentyp (int **) zuzuweisen. Nicht sicher von anderen Compilern.

    
Sakthi Kumar 29.10.2012 10:44
quelle
-1

Sie haben ein zweidimensionales Array erstellt Also hat jede Zeile einen Startzeiger .......

%Vor%

Diese Zeile gibt einen Fehler bcuz s [0] ist ein Element, aber p ist ein Zeiger, Sie müssen einen Zeigerwert in p übergeben, dann wird nur

gespeichert %Vor%

Diese Zeile gibt keinen Fehler, wenn Sie einen Adresswert an einen Zeiger übergeben, der in Ordnung ist

Es gibt noch eine Sache, die du wissen musst, wenn du passierst

%Vor%

es wird den Zeiger auf die erste Zeile geben, so dass jede Berechnung, die auf diesem Wud basiert, auf Zeilen angewendet werden kann

Wenn Sie Element für Element arbeiten wollen, sollten Sie p = & amp; s [0] [0]

schreiben

Ich hoffe, dies dient Ihrer Anfrage

u r Verwendung von zweidimensionalen Array, das kann durch eine Matrix wie dargestellt werden 1 2 3 4 5 6 7 8 4 5 2 3 jetzt mag jeder Zeiger & amp; s [0] = hat die Adresse des ersten Elements der ersten Zeile & amp; s [1] = hat die Adresse des ersten Elements der zweiten Zeile & amp; s [2] = hat die Adresse des ersten Elements der dritten Zeile aber alles andere & amp; s [i] [j] = hat die Adresse des exakten Elements

    
quelle