char *a = {"hello"}; 跟char *a = "hello"的区别

,哪个是字符串,那个是字符串数组,另外char*a={"hello"}为什么不能修改,大神讲下字符串和字符数组的区别吧... ,哪个是字符串,那个是字符串数组,另外 char *a = {"hello"}为什么不能修改,大神讲下字符串和字符数组的区别吧 展开
 我来答
antimoth
推荐于2017-09-18 · 超过36用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:69.5万
展开全部
你这个两个都是字符串。字符串数组char* a[]={"hello","world",NULL}; 这种读法大概可以这样认为,a先和[]构成一个数组,然后数组存放的内容是char*,也就是字符串,联合起来就构成了字符串数组。
char* a={"hello"}为什么不能修改,这个要涉及进程占用的内存分段,大概分为代码区,只读区,全局区,堆区,栈区。"hello"作为一个字符串字面值,是被放在只读区,只读顾名思义就是不能修改的。char* a="hello",相当于把hello的地址赋给了a,故而不能对a指向的内容进行修改。char a[]="hello",这样赋值的就是一个字符数组。字符数组a是在栈区里申请的一个空间给a,然后把只读区的"hello"进行了一次复制再赋值给a,这样a的指向是能修改的。
White_MouseYBZ
2013-12-22 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6657万
展开全部
从语法意义上讲,二者不太一样。但从使用角度来讲,就这个具体表达式,效果是一样的。
二者都是先生成一个常字符串,然后把其首地址(就是字母h的地址)赋给指针p。前者的{}在这里只有“板块”的意思了,所以与没有一样;后者你清楚。二者定义的字符串都是“常字符串”,不能修改。这没有“为什么”,就是这么规定的;想让其可变,就不要定义常量,用char a[]="hello";即可。char a[]="hello"的意思是声明一个数组a,并用一个字符串的“hello"的各位给a的各位对应赋值,并在最后加一位'\0'。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
2013-12-22 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3486万
展开全部
char *str0 = "1234"; //strlen(str0) = 4,sizeof(str0) = 4
char *str1 = "1234\0"; //strlen(str1) = 4,sizeof(str1) = 4
char str2[] = "1234"; //strlen(str2) = 4,sizeof(str2) = 5
以上是在VC++ 6.0环境下的测试结果,这里体现了strlen()和sizeof的区别。
严格地的活,str0和str1是指针,str2是数组,这是其定义方式决定的。
二者的共同点是:
1、都不能改变变量的指向,即str0、str1和str2都不能作为左值(=左边的变量);
2、作为函数参数都会被当作指针看待;
不同点是:
1、在用关键字sizeof计算长度时,数组长度会比字符串长度大1。
2、作为外部变量,char s[]在另一个(或多个)磁盘文件中,不能用char *s来指向s[],反之亦然。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lgao622
推荐于2017-09-09 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
  1. 没什么区别,是一样的意思,只不过是初始化的写法略有不同而已。加与不加大括号对于此时没什么影响,a都是指向"hello"的指针。

  2. 如同 int n={2}; 和 int n=2;一样。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丁三丸
2013-12-22
知道答主
回答量:2
采纳率:0%
帮助的人:1726
展开全部
这个要分两部分看,第一个部分等号前的部分char *a,这个的意思就是定义了一个指针。
后面的部分{"hello"},就是定义了一个数组,而"hello"则是一个字符串。
我们平时定义char a[] 这里的数组名其实也是一个指针。
结合起来看{"hello"},a是一个指针,指向的是数组的第一个元素的地址,即是“hello”这个元素的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式