char*str和char str []之间的区别

Bin*_*Bin 2 c

我将相同的字符串值分配给指针和char数组

char *str = "hello" "world";  
char str1[] = "hello" "world";
Run Code Online (Sandbox Code Playgroud)

然后使用sizeof()函数返回它们的长度

sizeof(str);     //  on my computer, it's 8 !!
sizeof(str1);    //  return 11, which is right
Run Code Online (Sandbox Code Playgroud)

但是它们都可以通过以下方式打印出来%s:

printf("%s\n%s\n", str, str1);
Run Code Online (Sandbox Code Playgroud)

那么为什么sizeof(str);返回错误的值呢?

hmj*_*mjd 8

那么为什么sizeof(str);返回错误的值?

它不会因为sizeof返回其操作数类型的字节大小.从6.5.3.4节C99标准(草案编号n869)的尺寸操作符,第2节:

sizeof操作者产生其操作数的大小(以字节为单位),其可以是表达或类型的括号名称.大小由操作数的类型确定.结果是整数.如果操作数的类型是可变长度数组类型,则计算操作数; 否则,不评估操作数,结果是整数常量.

因此:

sizeof(str)  == sizeof(char*)
sizeof(str1) == sizeof(char[11])
Run Code Online (Sandbox Code Playgroud)