Funktionsparameter sind ihre lokalen Variablen.
Sie können die Funktion aufrufen und seine Definition vorstellen, dass die folgende Art und Weise
char *name1 = "test_name";
switch_name(name1);
//...
void switch_name(/* char* name */)
{
char *name = name1;
name= "testv2";
}
Wie Sie die ursprüngliche Variable name1
sehen nicht in der Funktion geändert wurde. Die Variable name
ist der Parameter, der in der Funktion geändert wurde.
Sie müssen die ursprüngliche Variable als Referenz übergeben, wenn Sie sie in der Funktion ändern möchten.
Zum Beispiel
#include <stdio.h>
void switch_name(char ** name)
{
*name= "testv2";
}
int main(void)
{
char *name1 = "test_name";
printf("%s\n", name1);
switch_name(&name1);
printf("%s\n", name1);
}
Vergleichen Sie das obige Programm mit dem folgenden Programm
#include <stdio.h>
#include <string.h>
void switch_name(char* name)
{
strcpy(name, "testv2");
}
int main(void)
{
char s[] = "test_name";
char *name1 = s;
printf("%s\n", name1);
switch_name(name1);
printf("%s\n", name1);
return 0;
}
Im ersten Programm, das Sie gehen, um die ursprünglichen Zeiger selbst mit einer Funktion zuzuweisen.
Im zweiten Programm werden die Daten, auf die der Zeiger zeigt, mit der C-Standardfunktion strcpy
neu zugewiesen.
Berücksichtigen Sie, dass die C-Norm nach der Funktion main
ohne Parameter werden wie
int main(void)
deklariert werden
lesen empfohlen: [Was nach Wert vs. vorbei Referenz die Differenz zwischen Gang ist?] (Https://stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value) –
"Warum funktioniert mein Code nicht '-> Code funktioniert." noch der Code tut nicht was ich möchte "-> Was wollte der Code tun? – chux