#include <iostream>
using namespace std;
int main()
{
short a = 1000;
int b = 10000;
long double c = 5.560000505012;
cout << sizeof(c) - sizeof(b) << "\n"; // 12 ===> Tmam
cout << sizeof(c) + sizeof(b) << "\n"; // 20 ===> Tmam
cout << sizeof(a) * sizeof(c) << "\n"; // 32 ===> Tmam
cout << a * (int)c << "\n"; // 5000
cout << char( sizeof(c) * int(c) ) << "\n";
}
sizeof(c)
除了最后一行是 10 之外,每一行都是 16。为什么?
您提出的问题无法得到解答。它基于一个错误的前提。最后一行中
sizeof(c)
的值与上面几行中的值相同。因此,最后一行没有理由不同。 sizeof(c)
是编译时常量。它无法改变。
让我们重新表述一下这个问题:“最后一行发生了什么?”
坦率地说,我不明白你为什么打印前几行,但不明白你需要理解最后一行。打印子表达式:
#include <iostream>
int main()
{
// Do Not Edit Here
short a = 1000;
int b = 10000;
long double c = 5.560000505012;
std::cout << sizeof(c) << "\n";
std::cout << int(c) << "\n";
std::cout << sizeof(c) * int(c) << "\n";
std::cout << char( sizeof(c) * int(c) ) << "\n";
}
可能的输出是(可能会不同,因为
long double
的宽度不固定,只固定了最小宽度,可以更宽):
16
5
80
P
sizeof(c)
看起来是16
。 c
截断为 int
计算结果为 5
。他们的乘积是 80
并且在使用的字符编码 80
中会导致当 P
将该值通过管道传输到 char
时打印 std::cout
。
不涉及
10
。