sizeof()如何用于char *(指针变量)?

时间:2013-06-25 13:06:44

标签: c

我有一个C代码:

char s1[20];
char *s = "fyc";
printf("%d %d\n", sizeof(s1), sizeof(s));
return 0;

返回

20 8

我想知道8是怎么来的,谢谢!

5 个答案:

答案 0 :(得分:19)

sizeof(s1)是内存中数组的大小,在你的情况下,20个字符,每个字节等于20个。

sizeof(s)是指针的大小。在不同的机器上,它可以是不同的尺寸。我的是4岁。

要在您的计算机上测试不同的类型大小,您只需传递类型而不是像printf("%zu %zu\n", sizeof(char*), sizeof(char[20]));这样的变量。

它将分别在32位计算机上打印420

答案 1 :(得分:13)

sizeof(char *)是指针的大小,因此对于32位机器通常为4,对于64位机器通常为8。

另一方面,

sizeof数组输出数组的大小,在本例中为20 * sizeof(char)= 20

还有一件事,您应该%zu使用size_tprintf格式输入。

printf("%zu %zu\n", sizeof(s1), sizeof(s));

答案 2 :(得分:6)

8是指针的大小,地址。在64位机器上它有8个字节。

答案 3 :(得分:5)

sizeof运算符返回类型的大小。 sizeof的操作数可以是类型的括号名称或表达式但在任何情况下,大小仅由操作数的类型确定

因此,

sizeof s1严格等同于sizeof (char[20])并返回 20

sizeof s严格等同于sizeof (char*),并返回指向char的指针的大小(在您的情况下为 64位)。

如果您想要s指向的C字符串的长度,则可以使用strlen(s)

答案 4 :(得分:2)

如果您使用的是64位计算机,则内存地址为64位,因此必须使用64位(每字节8字节x 8位)数值来表示数字指针变量(char *)。

换句话说,sizeof()对于指针和标准变量的工作方式相同。您只需在使用指针时考虑目标平台。