Zeiger bzw. Pointer
-
Hi zusammen,
#include <stdio.h> int main() { int a=5; int *b; b=&a; printf("%d\n",b);//hier wird eine 7-stellige zahl ausgegeben, also die Adresse von a und in dieser Adresse steht der Wert 5? printf("%d\n",&b);//hier wird eine 7-stellige zahl ausgegeben, also die Adresse von b printf("%d\n",*b);//hier wird der Wert 5, der in der Adresse(also die adresse die beim 1. printf ausgegeben wird) von a steht ausgegeben return(0); }
Stimmt das?
Was bringt es eigentlich so mit Adressen rumzuspielen(&)?
mfg robby
-
Die Kommentare stimmen.
Du solltest nur bei den ersten beiden Fällen statt %d ein %p nehmen. (p für Pointer).
Du kannst damit auf Speicher zugreifen, von dem du im voraus nicht weist, wo er liegt.
Oder der Variablentausch (Rückgabe von mehr als einem Wert):
#include <stdio.h> void swap(int *i, int *j) { int t = *i; *i = *j; *j = t; } void main() { int a = 23, b = 47; printf("Before. a: %d, b: %d\n", a, b); swap(&a, &b); printf("After . a: %d, b: %d\n", a, b); }
Ohne Zeiger geht das nicht als C-Funktion.
-
1. Nein. Undefiniertes Verhalten. Der Formatspezifizierer für Pointer ist %p, nicht %d. Falls zufällig die Größe von int und Pointern auf deinem System genau gleich sein sollte, dann kommt eine Zahl heraus, die man als Adresse von a auffassen kann.
2. Siehe 1.
3. Ja.Was das bringt?
Kurze Antwort: Lies ein Lehrbuch.
Lange Antwort: Mit Pointern kann man komplexe Datenstrukturen erzeugen und Funktionsparameter "by reference" übergeben.