int main()
{
char *x = "HelloWorld";
char y[] = "HelloWorld";
x[0] = 'Z';
//y[0] = 'M';
return 0;
}
上記のプログラムでHelloWorld
は、読み取り専用セクション (文字列テーブル) になります。x
その読み取り専用セクションを指しているため、その値を変更しようとすると未定義の動作になります。
ただしy
、スタックに割り当てられ、HelloWorld
そのメモリにコピーされます。したがって、y を変更しても問題なく動作します。文字列リテラル: ポインターと char 配列
これが私の質問です:
次のプログラムでは、コンテンツが変更されると、 と の両方char *arr
でchar arr[]
セグメンテーション違反が発生します。
void function(char arr[])
//void function(char *arr)
{
arr[0] = 'X';
}
int main()
{
function("MyString");
return 0;
}
- 関数パラメーターのコンテキストでどのように異なりますか?
- 関数パラメーターにメモリが割り当てられませんか??
あなたの知識を共有してください。