为什么 sizeof 运算符对某些表达式的作用不同?
Why is the sizeof operator working differently for some expressions?
我知道 x++
或函数调用等表达式不会在 sizeof 运算符中求值。
当我 运行 下面的代码时,我得到了 4 8 8
作为输出。
有人可以向我解释第 6、7、8 行实际发生了什么吗?
#include <stdio.h>
int main()
{
int x=10;
double y=10.0;
printf("%d ",sizeof (x=x+y));
printf("%d ",sizeof (y=x+y));
printf("%d ",sizeof (x+y));
return 0;
}
我发现如果表达式包含一个赋值运算符 =
隐式(如预递增)或显式(如 x=x+y
),则表达式不会在 sizeof
运算符.
我说得对吗?
sizeof
运算符对参数的数据类型进行操作。在你的代码中
- 表达式
(x=x+y)
产生类型 int
,与 x
相同
- 表达式
(y=x+y)
产生类型 double
,与 y
相同
- 表达式
x+y
根据通常的算术转换规则生成类型 double
。
尺码以此计算。
在您的平台中,sizeof(int)
可能是 4
,而 sizeof(double)
是 8
,因此您会看到相应的输出。
也就是说,sizeof
会产生 size_t
类型的结果,您必须使用 %zu
格式说明符来打印结果。
对表达式进行求值,只是这些求值的结果不同:
x=x+y
可以读作:
int = float + int
发生的事情是,计算结果然后转换为 int,因此您得到结果 4:sizeof(int) = 4。
第二行类似,但有浮点数。
在最后一行计算 sizeof (float + int) 等于 sizeof(float) = 8。
sizeof
评估类型。
x
是一个 int
,在您的系统上似乎有 4 个字节 的大小。
y
是一个 double
并且在您的系统上似乎有 8 字节 的大小。
sizeof (x+y)
将计算为两者中最大的一个,因此 double
和 8 字节 .
x=x+y
仍然是 int
,因为将从 double
x+y
.
转换为 int
类型
因此sizeof (x=x+y)
是4字节.
y=x+y
仍然是 double
,因为 x+y
属于 double
.
类型
因此sizeof (y=x+y)
是8字节.
我知道 x++
或函数调用等表达式不会在 sizeof 运算符中求值。
当我 运行 下面的代码时,我得到了 4 8 8
作为输出。
有人可以向我解释第 6、7、8 行实际发生了什么吗?
#include <stdio.h>
int main()
{
int x=10;
double y=10.0;
printf("%d ",sizeof (x=x+y));
printf("%d ",sizeof (y=x+y));
printf("%d ",sizeof (x+y));
return 0;
}
我发现如果表达式包含一个赋值运算符 =
隐式(如预递增)或显式(如 x=x+y
),则表达式不会在 sizeof
运算符.
我说得对吗?
sizeof
运算符对参数的数据类型进行操作。在你的代码中
- 表达式
(x=x+y)
产生类型int
,与x
相同
- 表达式
(y=x+y)
产生类型double
,与y
相同
- 表达式
x+y
根据通常的算术转换规则生成类型double
。
尺码以此计算。
在您的平台中,sizeof(int)
可能是 4
,而 sizeof(double)
是 8
,因此您会看到相应的输出。
也就是说,sizeof
会产生 size_t
类型的结果,您必须使用 %zu
格式说明符来打印结果。
对表达式进行求值,只是这些求值的结果不同:
x=x+y
可以读作:
int = float + int
发生的事情是,计算结果然后转换为 int,因此您得到结果 4:sizeof(int) = 4。
第二行类似,但有浮点数。
在最后一行计算 sizeof (float + int) 等于 sizeof(float) = 8。
sizeof
评估类型。
x
是一个 int
,在您的系统上似乎有 4 个字节 的大小。
y
是一个 double
并且在您的系统上似乎有 8 字节 的大小。
sizeof (x+y)
将计算为两者中最大的一个,因此 double
和 8 字节 .
x=x+y
仍然是 int
,因为将从 double
x+y
.
int
类型
因此sizeof (x=x+y)
是4字节.
y=x+y
仍然是 double
,因为 x+y
属于 double
.
因此sizeof (y=x+y)
是8字节.