跳转至

数据类型

类别 类型名称 关键字/说明
基本类型
整数类型 短整型 short
整型 int
长整型 long
长长整型 long long (C99)
无符号短整型 unsigned short
无符号整型 unsigned int
无符号长整型 unsigned long
浮点类型 单精度浮点型 float
双精度浮点型 double
扩展双精度 long double
字符类型 字符型 char
无符号字符型 unsigned char
构造类型
数组 type[]type[n]
结构体 struct
共用体 union
枚举 enum
指针类型 type *(如 int *, char *
空类型 无类型 void
  • 布尔类型(C99): 关键字:_Bool<stdbool.h> 中的 booltrue/false)。 大小:通常1字节。
  • 复数浮点类型(c99): float _Complex, double _Complex, long double _Complex
  • 大小依赖平台: 具体大小可通过 sizeof 运算符获取,如 sizeof(int)
  • 字面量后缀:如 123Llong)、3.14ffloat)、ULLunsigned long long)。
  • 标准C中对任何一种数据类型的字节大小(所占位数)并没有严格意义上的规定。
  • 标准C中以int类型作为基准,int类型占一个机器字长,char型小于int类型。float类型和double类型大于int类型。
  • 标准C中只有大小范围的规定,并没有规定数据类型一定的字节数。
  • 8位一个字节。
  • 标准C中规定的是0 ~ 127个字符,后来补充到了255。共256个。
  • 在标准C中,char类型有无符号是未定义的。
  • char型一般占一个字节8位;
  • int一般占一个字长,4个字节32位;
  • short型占2个字节16位;
  • long型和float型一般与int一样大;
  • double类型相当于两个float类型64位。

类型转换

  • 隐式类型转换。不同类型运算时,会自动向所占字节数多的或是精度比较高的靠拢。

    /*
    (char + int) - (float + double)     // 不同类型计算
            int  -          double      // char + int 会转为int,float + double 会转为double
               double                   // 最后计算为double类型
    */
    int n = '5' - '0'; // 这里字符之间会整型提升,本质为两个字符的ASCII码计算。
    int m = 3.14; // float会隐式转为int,m存储为3
    

  • 显式类型转换(强制类型转换)

    int m = 5;
    float n = (float)m / 2; // m强制转为float
    

特殊性

  • 布尔型bool
    • 是一个逻辑型,在新的C标准中加入的数据类型。一般可以用整型值代替。
    • true 用1表示 和 false 用0表示
    • 头文件 #include
  • float类型
    • 其只能表达一个范围,不能表达非常精确的值。
    • 判断float类型数是否等于0,不能直接判断,要与0做减法判断差值是否小于很小的数,比如1e-6。
          // (f == 0) =====> ( |f - 0| <= 1e-6 )
          if (fabs(f - 0) <= 1e-6)
          {
              return 1;
          }
      
  • char类型有无符号未定义
  • 不同形式的0值
    • '0' "0" '\0' NULL
  • 数据类型与后续代码中所使用的输入输出要相匹配
    • 例如 int 使用 %d,要互相匹配,不要自相矛盾。