sizeof(char*)和sizeof(char)有何不同?

Shi*_*hik 1 c string pointers sizeof

#include<stdio.h>
main()
{
    char *str[]= {"Frogs","do","not","die","they","croak"};
    printf("%d %d %d",sizeof(str),sizeof(str[0]),sizeof(char));
}
Run Code Online (Sandbox Code Playgroud)

输出是:

48 8 1

据大小char存在1字节,有六个字符变量数组所以总规模应该6不是48!

Sou*_*osh 10

第1点

sizeof重新调整数据类型的大小,而不是分配给变量的内存量.

对于它的价值,如果你想测量一个字符串的长度(即字符串中的元素数量),你可以使用strlen()

第2点

不要混淆数据类型.

  • str是一个指针数组.它保存6的指针,所以sizeof将给出6 * sizeof(<pointer type>)其是6 * 8或48在64位的系统.
  • str[0]是一个指针,所以sizeof str[0]等于sizeof(char *)其是8在64位的系统.
  • C标准保证sizeof(char)等于1.

第3点

sizeof运营商返回一个size_t.您需要使用%zu格式说明符来便携且可靠地打印.