Der Zweck eines Zeigers besteht darin, die Adresse einer bestimmten Variablen zu speichern. Dann sollte die Speicherstruktur des folgenden Codes folgendermaßen aussehen:
int a = 5;
int *b = &a;
...... Speicheradresse ...... Wert
a ... 0x000002 ................... 5
b ... 0x000010 ..... .............. 0x000002
Okay gut. Dann nehme ich an, dass ich jetzt die Adresse des Zeigers * b speichern möchte. Dann definieren wir im Allgemeinen einen Doppelzeiger ** c als
int a = 5;
int *b = &a;
int **c = &b;
Dann sieht die Speicherstruktur so aus:
...... Speicheradresse ...... Wert
a ... 0x000002 ................... 5
b ... 0x000010 ..... .............. 0x000002
c ... 0x000020 ................... 0x000010
Also bezieht sich ** c auf die Adresse von * b.
Meine Frage ist nun, warum diese Art von Code funktioniert.
int a = 5;
int *b = &a;
int *c = &b;
eine Warnung generieren?
Wenn der Zweck des Zeigers nur darin besteht, die Speicheradresse zu speichern, sollte es meiner Meinung nach keine Hierarchie geben, wenn sich die zu speichernde Adresse auf eine Variable, einen Zeiger, einen Doppelzeiger usw. bezieht, daher sollte der folgende Codetyp verwendet werden gültig sein.
int a = 5;
int *b = &a;
int *c = &b;
int *d = &c;
int *e = &d;
int *f = &e;
warning: incompatible pointer types initializing 'int *' with an expression of type 'int **'; remove & [-Wincompatible-pointer-types]. Dies könnte alles klar gemacht haben.