Bio: C- verständniss der Grundlagen

Beitrag lesen

Sup!

Variable und &Variable?

Variable und Speicher-Adresse der Variable.

mit "&" adressiert man den speicher der variable? was soll der unterschied sein?

int a = 4;

printf("%d", a);

4

printf("%p", &a);

0x80001312 (oder so...)

char *String[]="bla bla bla"; (was macht das "*" ? warum wird mal nach char* mal vor variablenname geschrieben?)

char * String[] = "bla bla bla";

heisst:

String[]

String ist ein Array

* String[]

String ist ein Array von Zeiger(n)

char * String[]

String ist ein Array von Zeiger(n) auf char

char * String[] = "bla bla bla";

String ist ein Array von Zeiger(n) auf char, dessen erstem Element die Adresse der Zeichenkettenkonstante "bla bla bla" zugewiesen wird.

Eigentlich scheint das zuviel des Guten zu sein.

char String[] = "bla bla bla";

(String ist ein Array von char, dem "bla bla bla" zugewiesen wird) sollte reichen.

printf("%s", String);

und

printf("%s", &String);

Bei einem Array repräsentiert der Variablenname die Basis-Adresse des Arrays, die natürlich mit der Adresse des ersten Elements übereinstimmt.

Wenn

char String[3];

dann gilt:

String == &String[0]
String[2] == *(String + 2 * sizeof[char]);

Hier ist zu beachten, dass es den "*"-Operator zweimal gibt.
Einmal als Multiplikations-Operator (mit zwei Operanden), einmal als Dereferenzierungs-Operator (mit einem Operanden, der rechts vom Operator stehen muss).

int a = 2;
int * b;

b = &a;
==>
*b == a == 2

Aber zurück zu Deinem Beispiel:

printf("%s", String);

und

printf("%s", &String);

Die Verwendung des Adress-Operators ist hier unnötig, denn String ist bereits die Adresse der Zeichenkette.

Freundlicherweise liefert C als "Adresse einer Adresse" die Adresse zurück, d.h., der Adress-Operator tut quasi gar nichts.

Wie auch immer, Du solltest ein gutes C-Buch lesen ;-)

Gruesse,

Bio