关于c ++:指向字符串的指针大小和字符串大小的差异

Difference in size of a pointer to a string, and sizeof a a string

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Question about pointers and strings in C

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>

int main()  
{    
char *str1="abcd";  
char str2[]="abcd";  
printf("%d %d %d
"
,sizeof(str1),sizeof(str2),sizeof("abcd"));  
return 0;
}

为什么这个代码对sizeof(str2)sizeof("abcd")给出相同的答案,即使str2在理想情况下就像一个指向字符串的指针,str1也是如此,所以答案应该是4 4 5

Ideone密码:http://ideone.com/za8av

答:4 5 5


字符数组不是char指针。虽然数组在传递给函数时会衰减到指针,但它们本质上是不同的(具体来说,编译器知道它们在编译时的确切长度)。对于四个字符的字符串,您看到5的原因是字符串文本为终止零多保留一个char。另一方面,4依赖于系统:在具有32位指针的系统上,您将看到4,而在具有64位指针的系统上,您将看到8


你从哪里知道str2是"理想的就像一个指向字符串的指针"?不是这样。str2是一个数组。当运算符sizeof应用于数组时,它返回数组对象的大小(以字节为单位)。

字符串文字也是一个数组,所以当sizeof应用于字符串文字时,它将以字节为单位返回该数组对象的大小。因此,期望sizeof("abcd")sizeof(str2)产生相同的结果是很自然的。他们这样做了。

P.S.%d不是打印sizeof结果的适当格式说明符。%d需要int参数,而sizeof产生size_t值。使用%zu打印size_t类型的值。