Was bedeutet **
-
#include <stdio.h>
int main(int argc, char **argv)
Diese doppelten sehe ich ständig in irgendwelchen Foren, aber ich habe es noch nie in einer Literatur gesehen.
thx
-
char a;
a ist ein char
char* b;
b ist ein zeiger auf char
char** c;
c ist ein zeiger auf einen zeiger auf char
char*** d;
d ist ein zeiger auf einen zeiger auf einen zeiger auf char** ist nix magisches
-
vielleicht noch ein zusatz zum beitrag von Shade:
du kannst solche "**" immer nach der rechts-links-regel auflösend.h. du fängst beim namen der variablen an und nimmst zuerst das erste "zeichen", das rechts steht, dann das erste linke usw.
zB
char *a[];
a ist ein array (jetzt steht rechts nix mehr) von pointern auf chars
MfG
-
Wie passt diese Regel auf
char (*a)[10];
?
-
Für solche Fälle braucht man dann doch den C Declaration Decoder
du kannst solche "**" immer nach der rechts-links-regel auflösen
Immer ist hier eindeutig fehl am Platz. Für einfache Deklarationen ist das aber imo eine ganz brauchbare Vorgehensweise.
const int* p; // Ptr-to-const int const*p; int * const p; // const-Ptr int const * const p; // const-Ptr to const int const * const * p; // Ptr to const-Ptr to const ...
In solchen Fällen hilft das rechts-nach-links lesen.
-
creiner
*******Die heisst nicht "rechts nach links Regel", sondern "Precedence Rule", genauer, die Auflösung solcher Konstrukte richtet sich nach der Operatoren Priorität. Schätze mal deshalb hat Bashar auch gefragt.
EDIT:
allgemein
*********int const * const * p;
Bei solch einem Konstrukt hilft wirklich von rechts nach links lesen, wobei man als Faustregel noch wissen sollte, steht ein const gleich neben einer Typangabe bezieht sich das "const" auf diesen Typ, ansonsten bezieht sich das "const" auf das Pointersternchen links von ihm.
bye
tt