C/C++中字符串常量为什么可以赋值给char*?

您所在的位置:网站首页 不能给常量赋值 C/C++中字符串常量为什么可以赋值给char*?

C/C++中字符串常量为什么可以赋值给char*?

2024-07-13 15:20| 来源: 网络整理| 查看: 265

1、对于C来说,字符串常量是由字符构成的数组,比如“hello”类型为char[6],所以在C中可以直接字符串常量赋值给char*。既然C中字符串不是常量,是不是可以改变字符串常量的值呢?答案是否定的,虽然可以编译通过(会有警告),但是运行时会出错。因为字符串常量位于只读存储区不允许写操作。实验如下:

#include #include #include int main(int argc,char*argv[]) { printf("running \n"); char *p = "hello"; printf("%s\n", p); *p = "d";//改变p所指向的内存的值,即改变"hello",所以运行会出错 //p = "d";//只是改变了指针的指向,所以可以运行 printf("%s\n", p); system("pause"); return 0; }

在vscode中编译如下:

虽然出现了警告,但编译成功了。

运行结果如下:

程序在运行到*p = "d"时停止了。

2、但是对于C++来说,字符串常量是由常量字符构成的数组。比如"hello"类型是const char[6]。一般来说,const char *是不能转换成char *的,因为这样会删除底层const。但是这里为了兼容C代码做了特殊处理,所以允许将字符常量赋值给char*。

 

===》》》参考https://www.zhihu.com/question/20362192

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3