c++ - C语言中, 如下两种定义字符串的方式有什么不同?
巴扎黑
巴扎黑 2017-04-17 11:24:54
[C++讨论组]
char* str = "abcd";

char str[5] = "abcd";

比如在分配内存的时候, 还有在其他方面有什么区别

巴扎黑
巴扎黑

全部回复(2)
PHP中文网
  • const char *str1 = "abcd";这个语句在内存中分配了一块静态内存存储字符数组,然后把该字符数组的首地址赋予指针str1,这里的str1是一个指针,用sizeof操作符对其操作时,返回的是该指针的大小。
  • char str2[5] = "abcd";这个语句在栈内存中分配了一块内存存储字符数组,然后把该字符数组的首地址赋予str2,标识该数组,用sizeof操作符对其操作时,返回的则是数组名str2所标识数组的元素个数。

    Update: 更正

sizeof(type)        
sizeof expression   

两个版本都返回一个size_t类型的常量。
1) 返回 type 类型对应对象的大小(以字节为单位)。
2) 返回 expression 的返回类型对应对象的大小(以字节为单位)。

所以原来的回答有错误,现更正为: sizeof str1返回的是指针str1的字节大小,sizeof str2返回的是str2所标识数组的所有元素的字节大小。

大家讲道理

前者的数据只可读不可写, 后者的可读可写. 原因是数据存储的位置不同, 可读写属性不同.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号