Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这里发生了什么?sizeof(短整型变量和字符变量) #包括 int main() { 短整数i=20; 字符c=97; printf(“%d,%d,%d\n”,sizeof(i)、sizeof(c)、sizeof(c+i)); 返回0; }_C_Variables_Sizeof - Fatal编程技术网

这里发生了什么?sizeof(短整型变量和字符变量) #包括 int main() { 短整数i=20; 字符c=97; printf(“%d,%d,%d\n”,sizeof(i)、sizeof(c)、sizeof(c+i)); 返回0; }

这里发生了什么?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

有人能告诉我当sizeof(a+b)“a是短int类型,b是char类型”时会发生什么吗
输出为:2,1,4

sizeof仅在编译时用于获取表达式的大小

以下事实上不会增加“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)也将为4
short
的范围是-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 )