为了账号安全,请及时绑定邮箱和手机立即绑定

C 语言里为什么这样初始化字符串是错误的?

C 语言里为什么这样初始化字符串是错误的?

30秒到达战场 2019-04-19 16:29:43
C语言里的字符串实际上就是char组成的数组,所以#includeintmain(void){charstr[4]="abc";for(size_ti=0;i
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

刚才突然想明白了。
因为数组名只是代表数组第一个元素的地址的值,比如数组inta[10],a实际上就是&a[0],它只是一个值,就像5这类东西一样,是不能作为左值的,不能给它赋值。
所谓指针只是一种保存地址的变量,单独用数组名的时候它只是数组第一个元素的地址的值,并不是保存第一个元素地址的变量。
所以在任何时候都不能把数组名直接放在等号的左边,这个问题跟字符串什么的并没有什么关系。好像是这样的,如果有什么不对请大家指出。
                            
查看完整回答
反对 回复 2019-04-19
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

第一种
charstr[4]="abc";
这一种的含义是,分配一个char的数组(有四个元素),'a'放进str[0],'b'放进str[1],'c'放进str[2],'\0'放进str[3]
第二种
char*str;
str="abc";
这是声明一个char型指针变量str,然后创建一个字符串常量"abc",然后char指针str指向这个常量的内存,其实你可以试试,你可以通过str输出这个字符串(可以读),但是不能更改它(不能写)
第三种
charstr[4];
str="abc";
这种是有语法错误的,先声明一个char数组str[4],这时候str[4]有一块内存,而str作为数组名,相当于一个指针常量,固定指向str[4]这个数组的第一个元素的地址。
而你使用str="abc",相当于想要给一个指针常量赋值,所以显然是有语法错误的。想想你对一个常量赋值,当然会有错误!!
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 886 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信