开发者社区> 问答> 正文

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

char* str = "abcd";

char str[5] = "abcd";

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

展开
收起
a123456678 2016-06-06 16:20:53 1820 0
1 条回答
写回答
取消 提交回答
  • 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所标识数组的所有元素的字节大小。

    2019-07-17 19:28:54
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载