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



 char* str = "abcd";

char str[5] = "abcd";

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

c C++

treecn 11 years, 8 months ago
  • 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 所标识数组的所有元素的字节大小。

请叫我蒲节君 answered 11 years, 8 months ago

Your Answer