设char str[20], *s=str;printf("%d", sizeof(str)+sizeof(s));则输出的内容是 在32位编译器上,设有定义char *str1="hello...

\u8bbechar str[]="book\n";,\u6267\u884c\u8bed\u53e5printf("%d",sizeof(str));\u540e\u7684\u8f93\u51fa\u7ed3\u679c\u662f_____

6
\u5bf9\u4e8e\u9759\u6001\u6570\u7ec4 sizeof\u5f97\u5230\u6570\u7ec4\u5360\u7528\u7a7a\u95f4\u5927\u5c0f
\u6bd4\u5982 char a[10], \u90a3\u4e48sizeof(a) = 10
\u8fd9\u79cdchar str[] = "book\n"\u7684\u65b9\u5f0f\uff0cstr\u5206\u914d\u7a7a\u95f4\u4e3a\u5b57\u7b26\u4e32\u5360\u7528\u7a7a\u95f4\u6570
book\u56db\u4e2a\u5b57\u8282 \n\u4e00\u4e2a\u5b57\u8282 \u5b57\u7b26\u4e32\u7ed3\u675f\u7b26\0\u4e00\u4e2a\u5b57\u8282
\u5171\u8ba16\u4e2a

*str1 \u662f\u6307\u9488\uff0c\u6ca1\u6709\u52a8\u6001\u5206\u914d\u8fc7\u5355\u5143\u3002\u6240\u4ee5 \u662f 4\u5b57\u8282 \u5730\u5740 \uff0csizeof() \u5f97 4\u3002
str2="hello" \u8bed\u6cd5\u9519\u8bef\u3002

\u6b63\u786e\u5199\u6cd5\uff1a
char str1[]="hello", str2[]="hello";
printf("%d %d",sizeof(str1),strlen(str2));

sizeof() \u8ba1\u5165 '\0'; strlen() \u4e0d\u8ba1\u5165 '\0'

输出是 24

sizeof(str)这个比较简单,str数组是20个char,所以是20

sizeof(s)这个的值是4,因为s是指向char 类型的指针,所以相当于sizeof(char *)。

sizeof(str)
值为20这个毫无争议
sizeof(s)这个值若在16位机器上编译出来的结果是2,若在32位机器用32位编译器编译出来结果是4,若在64位机器上用64位C编译器结果是8
这没什么好争议的,对于32位机器:
任何指针类型sizeof结果都是4
指针只是存放了一个32位地址值的普通变量,他的值永远都是0x0-0xffffffff!永远是32位

刚才给你运行了一下 。。。是24

扩展阅读:char str 10 china ... char str 是什么意思 ... char string 81 ... char str 括号里的数字 ... char str 1234 ... 对于定义 char str ... char s 72 ... char strcpy ... char str hello ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网