機能パラメータはローカル変数です。
あなたは元の変数name1
は、関数内で変更されなかった見ることができるようにあなたは、次のよう
char *name1 = "test_name";
switch_name(name1);
//...
void switch_name(/* char* name */)
{
char *name = name1;
name= "testv2";
}
関数呼び出しとその定義を想像することができます。関数内で変更されたのは変数name
です。
元の変数を関数で変更する場合は、元の変数を参照渡しする必要があります。
#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);
}
例えば
は、関数を使用して、元のポインタ自体を再割り当てしようとしている最初のプログラムでは、以下のプログラム
#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;
}
で上記のプログラムを比較してください。
2番目のプログラムでは、標準C関数strcpy
を使用して再割り当てされるのはポインタによって指されたデータです。
int main(void)
が読ん推奨のようにC規格に従ってパラメータなし機能
main
が宣言されなければならないことを考慮してください:[値渡し対参照渡しの違いは何?](HTTPS:/ /stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value) –「なぜ私のコードが機能しないのですか?」 - >コードは動作します。コードは私がしたいことではありません " - >あなたは何をしたいのですか? – chux