Ich bin verwirrt auf Inkrementieren von Zeigern für Arrays und dann Messen der Differenz in Bytes für die Zeigerorte.Ermitteln der Anzahl der Bytes für einen Zeiger im Speicher
Ich verstehe, dass ein Zeiger *p
um die Größe des Datentyps beim Bewegen durch ein mehrdimensionales Array inkrementieren wird. Wenn jedoch ein Array wird thisArray
verwendet:
int thisArray[ 7 ][ 4 ];
Wie soll thisArrray + 1
bewertet werden? Zahle ich sowohl Zeilen als auch Spalten hoch?
Ich möchte wissen, um wie viele Byte auseinander diese Zeiger im Speicher sein werden.
Ich weiß, dass die genaue Antwort plattformabhängig sein wird. Ich suche die Methode der Lösung, nicht die genaue Antwort.
Da ich keinen Code in den Kommentaren formatiert werden kann: Ich bin es setzen sich hier:
// sizeof Mit
#include <stdio.h>
int main(void) {
int tbl[ 7 ][ 4 ];
// Size of tbl
int x = sizeof(*tbl);
printf ("%d\n" , x);
// Size of tbl + 1;
int y = sizeof(*tbl+1);
printf("%d\n", y);
//Size apart in bytes
int z = y - x;
printf("%d\n", z);
return 0;
}
Mögliches Duplikat von [Wie verwendet man Zeigerausdrücke für den Zugriff auf Elemente eines zweidimensionalen Arrays in C?] (Http: // stackoverflow.com/questions/13554244/how-to-use-Zeiger-Ausdrücke-to-Access-Elemente-eines-zweidimensionalen-Array-in) – BeyelerStudios
Die tatsächliche Antwort auf die Frage im Titel ist 'sizeof (* thisArray) '. – Dolda2000
@ Dolda2000 Das sieht richtig aus; der Compiler liefert diesen Fehler: q1.c: 12: 20: Warnung: sizeof auf Zeigeroperation wird Größe von 'int *' anstelle von 'int [5]' [-Wsizeof-array-decay] # einschließlich Int Haupt (leer) { int tbl [7] [4]; // Größe der Tabelle int x = sizeof (* tbl); printf ("% d \ n", x); // Größe von tbl + 1; int y = Größe von (* tbl + 1); printf ("% d \ n", y); // Größe getrennt in Bytes int z = y - x; printf ("% d \ n", z); Rückgabe 0; } –