Heim > Backend-Entwicklung > C++ > Hauptteil

Ein C/C++-Zeigerrätsel?

WBOY
Freigeben: 2023-09-21 23:33:03
nach vorne
1240 Leute haben es durchsucht

Ein C/C++-Zeigerrätsel?

Angenommen, wir haben eine Ganzzahlvariable mit einer Größe von 4 Bytes und eine weitere Zeigervariable mit einer Größe von 8 Bytes. Was wird also die Ausgabe unten sein?

Beispiel

#include<iostream>
using namespace std;
main() {
   int a[4][5][6];
   int x = 0;
   int* a1 = &x;
   int** a2 = &a1;
   int*** a3 = &a2;
   cout << sizeof(a) << " " << sizeof(a1) << " " << sizeof(a2) << " " << sizeof(a3) << endl;
   cout << (char*)(&a1 + 1) - (char*)&a1 << " ";
   cout << (char*)(&a2 + 1) - (char*)&a2 << " ";
   cout << (char*)(&a3 + 1) - (char*)&a3 << " ";
   cout << (char*)(&a + 1) - (char*)&a << endl;
   cout << (char*)(a1 + 1) - (char*)a1 << " ";
   cout << (char*)(a2 + 1) - (char*)a2 << " ";
   cout << (char*)(a3 + 1) - (char*)a3 << " ";
   cout << (char*)(a + 1) - (char*)a << endl;
   cout << (char*)(&a[0][0][0] + 1) - (char*)&a[0][0][0] << " ";
   cout << (char*)(&a[0][0] + 1) - (char*)&a[0][0] << " ";
   cout << (char*)(&a[0] + 1) - (char*)&a[0] << " ";
   cout << (char*)(&a + 1) - (char*)&a << endl;
   cout << (a[0][0][0] + 1) - a[0][0][0] << " ";
   cout << (char*)(a[0][0] + 1) - (char*)a[0][0] << " ";
   cout << (char*)(a[0] + 1) - (char*)a[0] << " ";
   cout << (char*)(a + 1) - (char*)a;
}
Nach dem Login kopieren

Um dieses Problem zu lösen, können wir einige wichtige Punkte befolgen:

  • Die Ganzzahlgröße beträgt 4 Byte (32 Bit) und die Zeigergröße beträgt 8 Byte. Wenn wir dem Zeiger 1 hinzufügen, zeigt er auf den nächsten unmittelbaren Typ.

  • Der Typ von &a1 ist int **, &a2 ist int *** und der Typ von &a3 ist int ****. Hier sind alle Hinweise. Wenn wir 1 hinzufügen, fügen wir 8 Bytes hinzu.

  • a [0] [0] [0] ist eine Ganzzahl, &a [0] [0] [0] ist int *, a [0] [0] ist int *, &a [0] [0] Der Typ ist int(*)[6] und so weiter. Der Typ von &a ist also int(*)[4][5][6].

Ausgabe

480 8 8 8
8 8 8 480
4 8 8 120
4 24 120 480
1 4 24 120
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEin C/C++-Zeigerrätsel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage