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

我有一个C代码:

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

它回来了

 20 8 

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

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

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

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

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

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

另一方面,数组的大小输出数组的大小,在这种情况下,20 * sizeof(char)= 20

还有一件事,你应该在printf格式中使用%zu作为size_t类型。

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

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

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

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

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

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

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

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