• 欢迎访问C语言网www.dotcpp.com 比赛栏每月有奖月赛!举办比赛联系QQ:2045302297
  • 问题反馈、粉丝交流 QQ群327452739 蓝桥杯训练群:113766799 申请群时请备注排名里的昵称
  • C语言研究中心 为您提供有图、有料、解渴的C语言专题! 欢迎讨论!

char a[]=”dotcpp.com”;char *p=”dotcpp.com”有啥区别?

C语言研究中心 CTO 9389次浏览 0个评论

这里首先说明一点:char *p和a[] 不是一回事,详情将后续更新。

那么两者最大的区别是什么呢?答:一个存了,一个没存!

 

为啥?先说第一个,第一个其实就是一个字符数组的定义连同初始化的过程,只不过长度缺省,这种情况编译器是允许的,其长度为后面初始化字符串的长度+1(因为‘\0’)。这个相信大家学过C语言看过教材的都应该知道。我们可以试图打印数组a处的地址,并注意和第二种写法的地址做比较!

char a[]=

 

重点是第二种写法 ,这种写法其实是定义了一个字符指针,指向这个字符串,也就是保存了www.dotcpp.com这个字符串的首地址,而本质上并未存储字符串本身,仅仅是”指向”。

 

这里的字符串其实就是一个没有名字的静态字符数组,会被编译器存储在只读内存中,导致它无法被修改,这里它做右值,会被转化为一个地址,也就是这个字符串在只读内存中存储的位置,大家可以打印出来观察:

 

char a[]=

 

当我们试图修改这个字符串,比如试图给p[i]赋值的时,程序编译没有错,但运行就会崩溃。大家可自行上机实验!

 

还有问题,请大家随时留言与我们沟通!

C语言研究中心(www.dotcpp.com)

C语言网提供「C语言、C++、算法竞赛」在线课程,全部由资深研发工程师或ACM金牌大佬亲授课,更科学、全面的课程体系,以在线视频+在线评测的学习模式学习,学练同步,拒绝理论派,真正学会编程!还有奖学金等增值福利等你!

C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明char a[]=”dotcpp.com”;char *p=”dotcpp.com”有啥区别?
喜欢 (19)
[jinyangH@aliyun.com]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)