char* pstr[] = { "Robert Redford",
"Hopalong Cassidy",
"Lassie",
"Slim Pickens",
"Oliver Hardy"
};
数组中各个指针被初始化成"Robert Redford"等字符串字面值的地址。字符串字面值的类型是const char数组,因此我们是在将const数组的地址存入非const的指针中。
编译器之所以允许我们使用字符串字面值初始化char*数组的元素,只是为了向后兼容现有的代码。
如果视图用下面语句
*pstr[0]="sad";
修改字符数组,则改程序将不能编译。
如果使用下面语句
*pstr[0]='x';
可以被编译,但是将在执行这条语句时崩溃。
避免崩溃的更好的声明方法为:
const char* pstr[] = { "Robert Redford",//指向常量字符的指针,可修改指针中存储的地址,不能修改指针指向的对象
"Hopalong Cassidy",
"Lassie",
"Slim Pickens",
"Oliver Hardy"
};
const char* const pstr[] = { "Robert Redford",//指向常量字符的常量指针,不能修改指针中存储的地址,不能修改指针指向的对象
"Hopalong Cassidy",
"Lassie",
"Slim Pickens",
"Oliver Hardy"
};
char* const pstr[] = { "Robert Redford",//指向字符的常量指针,不能修改指针中存储的地址,可修改指针指向的对象
"Hopalong Cassidy",
"Lassie",
"Slim Pickens",
"Oliver Hardy"
};