C++指针解释

Joh*_*ohn 2 c c++ pointers

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'.谢谢!

far*_*jad 7

你正在指向一个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)


xto*_*ofl 7

编译器应该警告过你:

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)

结果是,在运行时,指向您的二进制文件的指针,以及您正在写入的指针.但那只是内存,所以..崩溃.

  • 从C++ 11开始,编译器可能会将转换视为错误. (2认同)