Zeigervariablen keine Ahnung
-
Zeiger speichern die Adresse einer Variable im Arbeitsspeicher.
Um die Sache kurz zu fassen:
Mir ist der Umgang mit Zeigern nocht nicht so ganz klar.
Er speichert die Adresse einer Variable und in dieser Adresse ist ein Wert
verborgen oder diese Adresse enthält einen Wert meinetwegen eine int Zahl.
Darum geht es hauptsächlich.
Die Frage ist:
wie gehe ich vor wenn ich z.B mit dem Wert eine Multiplikation
durchführen möchte und wie gehe ich vor wenn ich mich nur
auf die Adresse beziehen möchte und wie mache ich es wenn
ich eine Funktion habe die so lautet
ausrechnen(int *pzahl)
{
//eine Mutiplikation
}Das ist z.B klar void Asci(char *text) { ....... ....... } Aufruf void main() { char zeile[] = "Hallo"; Asci(zeile); }
-------------------------------------
Aber das nicht void berechne(int *zahl) { ....... ....... } void main() { berechne(????) }
-
Das erste funktioniert nur, weil ein Array-Name ein Zeiger ist.
Und jetzt zum zweiten:void berechne(int *zahl) { cout << "zahl * 2 = " << (*zahl) * 2 << endl; // Mit dem Dereferenz-Operator (*) den Wert lesen, mit 2 multiplizieren und ausgeben } int main() { int IrgendEineZahl=4; berechne(&IrgendEineZahl); // Adresse von IrgendEineZahl übergeben return 0; }
-
Das ist vor allem spannend für call-by-reference:
void square(int *p) { *p *= *p; } int main() { int i = 2; square(&i); printf("%d\n", i); //gibt 4 aus return 0; }
oder halt für Arrays:
void double_array(int *array, int len) { int i; for(i = 0; i < len; ++i) array[i] *= 2; } int main() { int a[3]; a[0] = 1; a[1] = 2; a[2] = 3; double_array(a, 3); printf("%d, %d, %d\n", a[0], a[1], a[2]); //gibt 2, 4, 6 aus return 0; }