2026/07/30 sizeof运算符和类型转换

注意sizeof在C语言中是一个操作符,作用是计算数据类型的大小,结果以字节为单位,sizeof括号中的表达式是不会实现运算和处理的。

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a=1;
    int b=1;
    int c=1;

    printf("%d\n",sizeof(c=a+b) );  //只计算数据类型的大小,表达式不参与运算

    printf("a=%d,b=%d,c=%d\n",a,b,c );  
    return 0;
}

运行结果:

image

另外,虽然sizeof运算符中的表达式不会被运算,但是如果sizeof表达式中出现多个数据类型的大小计算,这个时候会涉及到C语言基本数据类型的转换,转换的意思指的是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型

一般程序中的数据类型转换分为两种情况:自动类型转换 or 强制类型转换。两者区别如下

自动类型转换

自动类型转换就是编译器默默地、隐式地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。比如将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换。

在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真,或者精度降低;所以说自动类型转换并不一定是安全的。对于不安全的类型转换,编译器一般会给出警告。

在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。

转换的规则:转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。例如int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再进行运算。所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。另外char 和 short 参与运算时,必须先转换成 int 类型。

强制类型转换

强制类型转换是程序员明确提出的、需要通过特定格式的代码来指明的一种类型转换。换句话说,自动类型转换不需要程序员干预,强制类型转换必须有程序员干预。

强制转换规则: (需要转换的数据类型) 变量

总结:无论是自动类型转换还是强制类型转换,都只是为了本次运算而进行的临时性转换,转换的结果也会保存到临时的内存空间(栈空间),不会改变数据本来的类型或者值。

posted @ 2026-07-30 16:37  !城北徐公.!  阅读(9)  评论(0)    收藏  举报