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

ポインタのポインタたん(;´Д`)ハァハァ




チューア・チュラム買った。
高い所に飾るとスカートがデカいせいでパンツと脚ばっか見える。