So ändern Sie den Wert der variable als argument übergeben wird?
So ändern Sie den Wert der variable als argument übergeben, in C?
Ich versuchte dies:
void foo(char *foo, int baa){
if(baa) {
foo = "ab";
} else {
foo = "cb";
}
}
und rufen:
char *x = "baa";
foo(x, 1);
printf("%s\n", x);
aber es druckt baa
warum?
vielen Dank im Voraus.
- Wenn(baa)? Es ist nicht ein bool-Wert, ist dies legal, in c?
- Es gibt keinen Boolean-Typen in C. Alle booleschen Logik erfolgt mit int-Werten.
- falsch. Seit C99 hat die Sprache
_Bool
als eine primitive Art undbool
im "stdbool.h".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie ändern zu wollen, wo ein
char*
Punkte, deshalb werden Sie brauchen, um zu akzeptieren ein argument infoo()
mit eine weitere Ebene der Dereferenzierung; einchar**
(Zeiger auf einenchar
Zeiger).Daher
foo()
würde wie folgt umgeschrieben werden:Nun beim Aufruf
foo()
ist, werden Sie geben eine Zeiger aufx
Verwendung des address-of-operator (&
):Den Grund, warum Sie Ihre falsche Schnipsel gibt
baa
ist, weil Sie einfach einen neuen Wert zuweisen der lokalen variablechar *foo
, die nicht in Zusammenhang mitx
. Daher wird der Wert vonx
nie geändert.x
auf ein anderes string-literal.Gibt es mehrere Probleme:
Dieser code ändert den lokalen Zeiger, aber macht nichts mit ihm. Zum kopieren von strings um, müssen Sie mit
strcpy()
zu halten, die Schnittstelle die gleiche:Jedoch, bevor Sie das tun, würden Sie brauchen, um sicherzustellen, dass
foo
in der Funktion Punkte auf modifizierbaren Speicher. Der aufrufende code muss geändert werden, um sicherzustellen, dass:Alternativ können Sie halten
x
als Zeiger und überarbeiten Sie die Funktion Schnittstelle:und die aufrufende Sequenz:
Beide Mechanismen funktionieren, aber nicht so, in Ihren verschiedenen Arten. Es gibt verschiedene Sätze von Fragen, die mit jedem. Gibt es nicht ein einfaches 'das ist besser, als' Entscheidung; was ist besser Umständen abhängt, die außerhalb des Geltungsbereichs des code-Fragmente gezeigt.
Frage ist mit dem Titel in einer generischen Art und Weise. Sie haben bereits Antworten für Ihr problem. Ich werde paar anschauliche Beispiele für
int
unddouble
Arten.Ausgabe:
in der Funktion foo, die Sie ändern argument foo nur lokal. wenn die Funktion " foo " enden, argument x noch x. Sie wollte es nicht ändern, foo. Sie nur kopiert und aufgerufen foo.
betrachten Sie auch @Greg Hewgill Kommentar.