C sizeof的功能
为什么要使用以下代码:C sizeof的功能,c,C,为什么要使用以下代码: #include <stdio.h> #include <stdlib.h> int main() { printf("Hello world!\n"); int x; long l; double d; printf("\n%d",sizeof(x+l+d)); return 0; } #包括 #包括 int main() { printf(“你好,世界!\n”); int x; 长l; 双d;
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
int x;
long l;
double d;
printf("\n%d",sizeof(x+l+d));
return 0;
}
#包括
#包括
int main()
{
printf(“你好,世界!\n”);
int x;
长l;
双d;
printf(“\n%d”,大小为(x+l+d));
返回0;
}
在控制台8上打印?
我最初认为这会将x
和l
转换为double并显示24。
为什么是8?
sizeof
返回用于存储其参数的字节数。在这种情况下,它的参数是x+l+d
x
是一个int
,l
along
,和d
adouble
。将整数类型添加到double
s时,结果将升级为double
。因此,您所编写的内容相当于sizeof(double)
。一个double
需要8个字节来存储,因此您看到的结果是8
。sizeof
返回用于存储其参数的字节数。在这种情况下,它的参数是x+l+d
x
是一个int
,l
along
,和d
adouble
。将整数类型添加到double
s时,结果将升级为double
。因此,您所编写的内容相当于sizeof(double)
。一个double
需要8个字节来存储,因此您看到的结果是8
。您只将一个参数传递给sizeof,并且该单个参数的类型是double
。如果您编写了sizeof(x)+sizeof(l)+sizeof(d),则情况会有所不同(尽管仍然不是24,因为不是每个参数都是double
)。您只将一个参数传递给sizeof,而单个参数的类型是double
。如果您编写了sizeof(x)+sizeof(l)+sizeof(d),则情况会有所不同(尽管仍然不是24,因为不是每个参数都是double
)。因为sizeof
检查其参数的类型x+l+d
是一个类型为double
的表达式,因此它的大小显然是–8字节。顺便说一下,使用%d
转换说明符打印sizeof
的结果是未定义的行为,size\u t
的正确格式字符串是%zu
。因为sizeof
检查其参数的类型x+l+d
是一个类型为double
的表达式,因此它的大小显然是–8字节。顺便说一下,使用%d
转换说明符打印sizeof
的结果是未定义的行为–size\u t
的正确格式字符串是%zu
。