如何给一个字符指针 char *p 赋值?我看到很多博客上面写的是这样操作:
char *p;
p="hello";
在C语言中这种方式确实是被允许的,但是到c++11中会给出警告(报错):
错误提示的意思是我们将一个字符串常量绑定地址绑定到了一个非常量字符指针上,C语言中隐式转换成了char* ,但是c++就拒绝了这个操作,让人自行承担这个后果,所以我们在定义前加上一个const 即:
const char *p = "This is the address returned by the string";
这样就没什么问题了,但是有时候我们们需要在类中定义,在外部函数中修改,这时我们类比操作先声明再赋值;
const char *p;
p = "kaka";
虽然 p指向的对象是const,即不能通过 *p = “other object” 来修改对象 ,但是指针 p本身不是常量,依然可以通过更换其指向的地址来达到修改其指向的值
const char *p;
p = "kaka";
p = "other objects";
cout<<p<<endl;
如果是初学者可能不明白为什么 cout<<p; 是输出的整个字符串数组,p不是一个指针吗?是因为 printf 和 cout都对字符数组或者字符指针有重载,即从地址P开始输出字符直到遇到 ‘\0’ 时停止,所以可以这样操作进行手动赋值
const char * b="kaka";
cout << b << endl;
char a[10];
cin >> a;
b = a;
cout << b << endl;
结果: