Ich brauche Hilfe, einige der Ausgaben des Codes unten zu verstehen. (Dies ist nur eine Beispielfrage für eine Zwischenprüfung, keine Hausaufgaben).Bestimmen der Ausgabe mit Zeigern
#include <stdio.h>
void figure_me_out(int* a, int b, int c, int* d);
int main(void) {
int var1 = 1, var2 = 10, var3 = 15, var4 = 20;
figure_me_out(&var1, var2, var3, &var4);
printf("%d, %d, %d, %d\n", var1, var2, var3, var4);
return 0;
}
void figure_me_out(int* a, int b, int c, int* d) {
c = b;
b = *d;
*a = 222;
*d = 100;
a = d;
*a = c;
}
Ausgabe
222, 10, 15, 10
Als ich durch den Code ging ich 10 bekam, 10, 15, 100. Das ist meine Logik war:
c = 10 ---> c war übergeben nach Wert, so ändert sich c nicht für printf
b = 20 ---> gleicher Grund wie oben
* a = 222 ---> das dereferenziert a und gibt ihm den Wert von 222. Da wurde var a übergeben als Referenz verändert es den ursprünglichen Wert.
* d = 100 ---> demselben Grund wie oben
(dieser Teil ist, wo ich verwirrt) a = 100 ---> Ich denke, dass da d auf 100 geändert wurde, dass Mittel a ist zugeordnet, was d ist gleich jetzt, das ist 100.
* a = 10 ---> den Wert von a zu ändern 10
Ich weiß, dass die Funktion nicht die ursprünglichen Werte von b (var2) geändert und c (var3), da sie wertmäßig übergeben wurden, änderte aber den Rest. Also bin ich verwirrt, warum var1 Drucke als 222 und var4 Drucke als 10.
C unterstützt nicht Pass-by-Reference. Es ist streng pass-by-Wert. Zeiger sind keine Referenzen, sie sind erstklassige Typen wie z.B. "int". – Olaf