可能重复:
Sizeof doesn't return the true size of variable in C
C -> sizeof string is always 8为什么sizeof会为C中的同一个字符串返回不同的值?
的sizeof打印出6:
printf("%d\n", sizeof("abcde"));
但它打印出4:
char* str = "abcde";
printf("%d\n", sizeof(str));
有人可以解释为什么吗?
可能重复:
Sizeof doesn't return the true size of variable in C
C -> sizeof string is always 8为什么sizeof会为C中的同一个字符串返回不同的值?
的sizeof打印出6:
printf("%d\n", sizeof("abcde"));
但它打印出4:
char* str = "abcde";
printf("%d\n", sizeof(str));
有人可以解释为什么吗?
字符串文字"abcde"
是字符数组。它有6个字节长,包括空终止符。
类型char*
的变量是指针到一个字符。它的大小是指针的大小,在32位系统上是4字节。 sizeof
是编译时操作†,所以它只查看变量的静态类型,在这种情况下是char*
。它不知道什么是指向。
†除可变长度数组,在C99语言标准
第一示例中引入的功能的情况下,sizeof()
返回长度的纯字符串的。
第二个例子,sizeof()
返回大小的指针 - > 32bits这样4个字节。
因为这里
printf("%d\n", sizeof("abcde"));
是一个字符串,考虑空的6字节长。
和
char* str = "abcde";
printf("%d\n", sizeof(str));
是需要32位,因此4个字节:-)
指针