char * p = "abc"与const char *p = "abc"的区别是什么呢?
第一个语句会产生问题:
warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
此时我们只需要改成第二个用法警告就消失了,这是为什么呢?
我们来分别理解以下两个语句,首先要清楚的是char * p语句定义的p是一个指针变量,假设我们用的是第一个语句,那么我们所表达的意思是p的地址是abc,因此会出现问题。
而第二个语句的意思是我们定义了一个指针变量,然后改变了它指向了一个字符串常量。这样以来语句二可以拆分为两个句子,即:
1 const char * p; 2 p = "abc";
我们先声明了一个指针变量,然后改变了它所指的地址,因此错误就不存在了。
如:
1 #include <iostream> 2 3 using namespace std; 4 5 int main() { 6 const char * p = "ab213123c"; 7 cout << p << endl; 8 char a[] = "12344"; 9 p = a; 10 cout << p << endl; 11 p = "111"; 12 cout << p << endl; 13 return 0; 14 }
上述代码会输出:
ab213123c
12344
111