char*型を関数に渡して文字列を代入する
char*型を普通に渡しても配列を渡すように受け渡し元のデータは変わらない。
//関数側で配列内のデータを書き換える void func1(int num[]){ num[0] = 7; } //関数側で文字列を書き換えたい? void func2(char* c){ c = "new name"; } int main(void){ int num[1]; func1(num); printf("%d",num[0]); char* str = "hello world" void func2(str); printf("%s",str); return 0; } //実行結果 //7 //hello world
実行結果をみると、strは中身が書き変わっていない。
void func2(str);
この時点では str == c だが、
c = "new name";
char*型の変数cに対して文字列new nameを格納した新たなアドレスを渡したため、cはstrとは無関係になっている。
なので関数側で書き換えたければ以下のようにする。
//関数側で文字列を書き換えたい? void func2(char** c){ //ポインタのアドレスの実体 == ポインタを書き換え *c = "new name"; // *cは書き変わったけど、c == &strのまま。 } int main(void){ char* str = "hello world" void func2(&str);//ポインタのアドレスを渡す printf("%s",str); return 0; } //実行結果 //new name
ポインタのポインタたん(;´Д`)ハァハァ
チューア・チュラム買った。
高い所に飾るとスカートがデカいせいでパンツと脚ばっか見える。