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

C语言中, 如下两种定义字符串的方式有什么不同?

C语言中, 如下两种定义字符串的方式有什么不同?

弑天下 2019-03-29 22:08:42
char*str="abcd";charstr[5]="abcd";比如在分配内存的时候,还有在其他方面有什么区别
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

constchar*str1="abcd";这个语句在内存中分配了一块静态内存存储字符数组,然后把该字符数组的首地址赋予指针str1,这里的str1是一个指针,用sizeof操作符对其操作时,返回的是该指针的大小。
charstr2[5]="abcd";这个语句在栈内存中分配了一块内存存储字符数组,然后把该字符数组的首地址赋予str2,标识该数组,用sizeof操作符对其操作时,返回的则是数组名str2所标识数组的元素个数。
Update:更正
sizeof(type)
sizeofexpression
两个版本都返回一个size_t类型的常量。
1)返回type类型对应对象的大小(以字节为单位)。
2)返回expression的返回类型对应对象的大小(以字节为单位)。
所以原来的回答有错误,现更正为:sizeofstr1返回的是指针str1的字节大小,sizeofstr2返回的是str2所标识数组的所有元素的字节大小。
                            
查看完整回答
反对 回复 2019-03-29
?
红颜莎娜

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

前者的数据只可读不可写,后者的可读可写.原因是数据存储的位置不同,可读写属性不同.
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 455 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号