这里发生了什么?sizeof(短整型变量和字符变量) #包括 int main() { 短整数i=20; 字符c=97; printf(“%d,%d,%d\n”,sizeof(i)、sizeof(c)、sizeof(c+i)); 返回0; }
有人能告诉我当sizeof(a+b)“a是短int类型,b是char类型”时会发生什么吗这里发生了什么?sizeof(短整型变量和字符变量) #包括 int main() { 短整数i=20; 字符c=97; printf(“%d,%d,%d\n”,sizeof(i)、sizeof(c)、sizeof(c+i)); 返回0; },c,variables,sizeof,C,Variables,Sizeof,有人能告诉我当sizeof(a+b)“a是短int类型,b是char类型”时会发生什么吗 输出为:2,1,4sizeof仅在编译时用于获取表达式的大小 以下事实上不会增加“c”: c=sizeof(++c) 表达式sizeof(a+b)将返回具有优先权的无符号的最大类型,因为C的标准,表达式C+i的类型是int,所以得到的是与sizeof(int)等价的类型 #include <stdio.h> int main() { short int
输出为:2,1,4sizeof仅在编译时用于获取表达式的大小 以下事实上不会增加“c”: c=sizeof(++c) 表达式sizeof(a+b)将返回具有优先权的无符号的最大类型,因为C的标准,表达式
C+i
的类型是int
,所以得到的是与sizeof(int)
等价的类型
#include <stdio.h>
int main()
{
short int i = 20;
char c = 97;
printf("%d, %d, %d\n", sizeof(i), sizeof(c), sizeof(c + i));
return 0;
}
请注意,sizeof
不是一个函数,只有在命名类型时才需要括号。您的代码可以编写为:
1) sizeof(i) ==> sizeof(short int) = 2
2) sizeof(c) ==> sizeof(char) = 1
3) sizeof(c + i [97+20]) ==> sizeof(int) = 4 // result in constant value which is int as default
sizeof
的最后一个用法带有括号,因为sizeof
的绑定比+
更紧,表示sizeof c+i
将被解析为(sizeof c)+i
,这不是期望的结果
还要注意的是,大多数时候它是编译时构造,表达式从未实际计算过。所发生的一切就是编译器“假装”对其求值,找出表达式的类型,然后给出该类型值的大小。实际值永远不需要存在,这有时是整洁的
sizeof
返回的值类型是size\u t
,它是使用%zu
打印的(它不是int
)。a的数据类型是“short int”-32768~+32767
c的数据类型是“char”。0~255
将a添加到c时,它既不是短int也不是字符,而是int
以下是帮助您获取变量数据类型的示例代码:
printf("%zu, %zu, %zu\n", sizeof i, sizeof c, sizeof (c + i));
#包括
int main()
{
短int a=1;
字符c='A';
正如其他人所说,sizeof是在编译时计算的
这里,表达式c+i
integer的值,因为c和i被提升(整数提升)为int,因此
#include <typeinfo>
int main()
{
short int a = 1;
char c = 'A';
std::cout << typeid(a + c).name() << std::endl;
return 1;
}
在32位计算机上为您提供4个字节。sizeof
是一个编译时构造。结果的大小按int计算。您还没有提到sizeof(c+c)也将为4,sizeof(c/2)或sizeof(1998)也将为4short
的范围是-32768到32767。正如您在其他地方所说的,为了避免混淆,请始终在sizeof
和左括号之间加一个空格。(我只是为了让读者明白这个诙谐的约定)代码应该是printf(“%zu,%zu\n”,sizeof I,sizeof c,sizeof(c+I))
因为@LưuVĩnhPhúc绝对感谢你纠正了这个旧答案。当然是经过编辑的。“生成默认为int的常量值”-嗯?我甚至不明白你在说什么。@ChristianRau我说的是(c+I)
这会导致常量值,默认值为int
。我不知道为什么我一次又一次地被否决?因为我的英语
,还是我得到了错误的答案?因为我无法正确解读答案,所以我不确定你是否在正确的轨道上。但听起来你并不是真的在引用积分pr运动规则(或者至少没有正确解释),所以我不得不假设最坏的情况。不幸的是,c+I
导致一个常量值(无论如何都不是真的)与此完全无关。它之所以是int
的实际解释是因为两个操作数在加法之前都被提升为int
,因此总和的类型也是int
(请看其他一些答案)。
sizeof( c + i )