我有一个C代码:
char s1[20];
char *s = "fyc";
printf("%d %d\n", sizeof(s1), sizeof(s));
return 0;
Run Code Online (Sandbox Code Playgroud)
它回来了
20 8
Run Code Online (Sandbox Code Playgroud)
我想知道8是怎么来的,谢谢!
Nob*_*lis 22
sizeof(s1)
是内存中数组的大小,在你的情况下,20个字符,每个字节是1个字节等于20.
sizeof(s)
是指针的大小.在不同的机器上,它可以是不同的尺寸.我的是4.
要在机器上测试不同的类型大小,您只需传递类型而不是类似的变量printf("%zu %zu\n", sizeof(char*), sizeof(char[20]));
.
这将打印4
和20
32位机器上分别.
Yu *_*Hao 13
sizeof(char *)
是指针的大小,因此32位机器通常为4,64位机器为8.
sizeof
另一方面,数组输出数组的大小,在这种情况下,20*sizeof(char)= 20
还有一件事,你应该使用%zu
的size_t
型printf
格式.
printf("%zu %zu\n", sizeof(s1), sizeof(s));
Run Code Online (Sandbox Code Playgroud)
该sizeof
运营商返回的大小类型.操作数sizeof
可以是类型的括号名称或表达式,但在任何情况下,大小仅由操作数的类型确定.
sizeof s1
因此严格等同于sizeof (char[20])
并返回20.
sizeof s
是严格等效于sizeof (char*)
并返回指针的大小char
(在您的情况下为64位).
如果你想要指向的C字符串的长度s
,你可以使用strlen(s)
.