最近重新学习C语言,在指针数组处遇到了点问题:
代码如下:
#include <stdio.h>
int main()
{
char *p[3] = {
"how r u ?",
"i'm fine,thanks.",
"and u ?"};
int i;
for(i = 0 ; i < 3 ; i ++)
{
printf("%s\n", p[i]);
}
return 0;
}
最后可编译,但是显示警告:warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
也就是说,字符串常量是不能转化为指针变量的。指针数组中存放的是指针变量,指针变量存放的是右边每一个字符串常量的内存首地址,是指示器。右边则只是字符串常量即字面上“how r u ?"这些。指针即地址和常量有本质性的区别。编译器虽然可以编译,但是会给出警告,表明这是不符合规定的。所以一般建议当const char *类型处理。
修改:添加const,表明p指向的内容为const类型,不能改变。
const char *p[3] = {
"how r u ?",
"i'm fine,thanks.",
"and u ?"};
修改后正常编译,没有警告。