C ++指针解释

时间:2011-05-23 12:07:25

标签: c++ c pointers

char* pstr[] = { "Robert Redford", // Initializing a pointer array
                 "Hopalong Cassidy",
                 "Lassie",
                 "Slim Pickens",
                 "Boris Karloff",
                 "Oliver Hardy"
               };

如果我写得如下:

*pstr[0] = 'X';

程序可以编译但在执行此语句时崩溃。为什么?我认为* pstr [0]是'R',所以我可以从'R'变为'X'。 谢谢!

4 个答案:

答案 0 :(得分:7)

您正在指向const char*的数组。所以pstr [0]指向const char*,你不能改变它的值。

以这种方式编写此代码是一种很好的编程习惯,因此如果您尝试更改值而不是运行时错误,则会出现编译器错误:

char* const pstr[] = { "Robert Redford", // Initializing a pointer array
                 "Hopalong Cassidy",
                 "Lassie",
                 "Slim Pickens",
                 "Boris Karloff",
                 "Oliver Hardy"
               };

答案 1 :(得分:7)

编译器应该警告过你:

warning: deprecated conversion from string constant to 'char*''

你在这里做的是为可变的char指针分配一些常量char数组,就像:

const char[] astring = "ababa";
char* mutablestring = astring; // shouldn't be possible
mutablestring[0] = 'o'; // change 'readonly' location

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

答案 2 :(得分:2)

字符串文字是常量,因此您无法更改它们。

允许从const char*转换为char*,以便在C获得const之前允许旧的C代码。

答案 3 :(得分:2)

pstr是一个包含const *char元素的数组。修改只读内存的结果是未定义的。如果您知道每个字符串的最大大小,您可以像这样声明pstr

char pstr[][32] = { "Robert Redford",
                 "Hopalong Cassidy",
                 "Lassie",
                 "Slim Pickens",
                 "Boris Karloff",
                 "Oliver Hardy"
               };