char* pstr[] = { "Robert Redford", // Initializing a pointer array
"Hopalong Cassidy",
"Lassie",
"Slim Pickens",
"Boris Karloff",
"Oliver Hardy"
};
Run Code Online (Sandbox Code Playgroud)
如果我写如下:
*pstr[0] = 'X';
Run Code Online (Sandbox Code Playgroud)
程序可以编译但在执行此语句时崩溃.为什么?我认为*pstr [0]是'R',所以我可以从'R'变为'X'.谢谢!
你正在指向一个const char*s 数组.所以pstr [0]指向a const char*而你无法改变它的值.
以这种方式编写此代码是一种很好的编程习惯,因此如果您尝试更改值而不是运行时错误,则会出现编译器错误:
char* const pstr[] = { "Robert Redford", // Initializing a pointer array
"Hopalong Cassidy",
"Lassie",
"Slim Pickens",
"Boris Karloff",
"Oliver Hardy"
};
Run Code Online (Sandbox Code Playgroud)
编译器应该警告过你:
warning: deprecated conversion from string constant to 'char*''
Run Code Online (Sandbox Code Playgroud)
你在这里做的是为可变的char指针分配一些常量char数组,就像:
const char[] astring = "ababa";
char* mutablestring = astring; // shouldn't be possible
mutablestring[0] = 'o'; // change 'readonly' location
Run Code Online (Sandbox Code Playgroud)
结果是,在运行时,指向您的二进制文件的指针,以及您正在写入的指针.但那只是内存,所以..崩溃.