版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
假设它是合法的,那么在下一行中我们就可以通过pcc间接地使pc这个char*指向一个const char而没有任何强制转换。
这时候//2处的代码就可以修改const char的内容了
假设它是合法的,那么在下一行中我们就可以通过pcc间接地使pc这个char*指向一个const char而没有任何强制转换。
这时候//2处的代码就可以修改const char的内容了
1、对于C来说,字符串常量是由字符构成的数组比如“hello”类型为char[6],所以在C中可以直接字符串常量赋值给char*既然C中字符串不是常量,是不是可以改变字符串常量的值呢答案是否定的,虽然可以编译通过(会有警告)但是运荇时会出错。因为字符串常量位于只读存储区不允许写操作实验如下:
*p = "d";//改变p所指向的内存的值,即改变"hello"所以运行会出错 //p = "d";//只是改变了指針的指向,所以可以运行
在vscode中编译如下:
虽然出现了警告但编译成功了。
程序在运行到*p = "d"时停止了
2、但是对于C++来说,字符串常量是由常量字符构成的数组比如"hello"类型是const char[6]。一般来说const char *是不能转换成char *的,因为这样会删除底层const但是这里为了兼容C代码做了特殊处理,所以允许将芓符常量赋值给char*
p是指向int,所以直接输入地址
你反过来想, 如果cout转出一个char*指针时, 是得到一个指针地址. 那么你要怎么输出一个芓符串呢, 难道一个字符一个字符的输出?
理解这个, 就不会有此一问了.
但是不用格式控制符输入输出恰好是你期望的格式的时候好说;等到輸入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱
cout对于字符串指针输出的是字符串的值,而不是指针地址
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。