为什么sizeof在C中返回相同字符串的不同值?

Kob*_*obi 2 c unix string sizeof

可能重复:
Sizeof不返回C C 中变量的真实大小
- > sizeof string始终为8

Sizeof打印出6:

printf("%d\n", sizeof("abcde"));
Run Code Online (Sandbox Code Playgroud)

但它打印出4:

char* str = "abcde";
printf("%d\n", sizeof(str));
Run Code Online (Sandbox Code Playgroud)

有人可以解释原因吗?

Ada*_*eld 6

字符串文字"abcde"是一个字符数组.它长6个字节,包括空终止符.

类型的变量char*指向字符的指针.它的大小是指针的大小,在32位系统上是4个字节. sizeof是一个编译时操作,所以它只查看变量的静态类型,在这种情况下是char*.它不知道指向了什么.

†除了可变长度数组外,C99语言标准中引入了一项功能