1、数据类型

  • C语言中的类型可分为以下几种
    1. 基本类型:它们是算术类型,包括两种类型:整数类型和浮点类型
    2. 枚举类型:它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量
    3. void 类型:类型说明符 void 表明没有可用的值
    4. 派生类型:它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型
  • C语言把任何非零和非空的值假定为 true,把零或 null 假定为 false ,C语言没有布尔类型

2、数值类型

  • 各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主
  • int、short int、long int是根据编译环境的不同,所取范围不同

    整型

  • char:1 字节,-128 到 127 或 0 到 255

  • unsigned char:1 字节,0 到 255
  • int:2 或 4 字节,-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
  • unsigned int:2 或 4 字节,0 到 65,535 或 0 到 4,294,967,295
  • short int:2 字节,-32,768 到 32,767
  • long int:8 字节
  • short:2 字节,-32,768 到 32,767
  • unsigned short:2 字节,0 到 65,535
  • long:4 字节,-2,147,483,648 到 2,147,483,647
  • unsigned long:4 字节,0 到 4,294,967,295
  1. #include <stdio.h>
  2. int main(int argc, const char * argv[]) {
  3. // insert code here...
  4. printf("char 存储大小 : %lu \n", sizeof(char)); // 1
  5. printf("unsigned char 存储大小 : %lu \n", sizeof(unsigned char)); // 1
  6. printf("short 存储大小 : %lu \n", sizeof(short));// 2
  7. printf("unsigned short 存储大小 : %lu \n", sizeof(unsigned short));// 2
  8. printf("int 存储大小 : %lu \n", sizeof(int));// 4
  9. printf("unsigned int 存储大小 : %lu \n", sizeof(unsigned int));// 4
  10. printf("long 存储大小 : %lu \n", sizeof(long));// 8
  11. printf("unsigned long 存储大小 : %lu \n", sizeof(unsigned long));// 8
  12. return 0;
  13. }

进制

  • 进制

    • 默认为10进制 ,10 ,20
    • 以0开头为8进制,045,021
    • 以0b开头为2进制,0b11101101
    • 以0x开头为16进制,0x21458adf

      浮点型

  • float:4 字节,1.2E-38 到 3.4E+38,6 位小数

  • double:8 字节,2.3E-308 到 1.7E+308,15 位小数
  • long double:16 字节,3.4E-4932 到 1.1E+4932,19 位小数

image.png

  1. #include <stdio.h>
  2. #include <float.h>
  3. int main(int argc, const char * argv[]) {
  4. printf("float 存储最大字节数 : %d \n", sizeof(float));// 4
  5. printf("double 存储最大字节数 : %d \n", sizeof(double));// 8
  6. printf("long double 存储最大字节数 : %d \n", sizeof(long double));// 16
  7. printf("float 最小值: %E\n", FLT_MIN );// 1.175494E-38
  8. printf("float 最大值: %E\n", FLT_MAX );// 3.402823E+38
  9. printf("精度值: %d\n", FLT_DIG );// 6
  10. return 0;
  11. }

类型转换

  • 自动/强制类型转换

    1. int main(int argc, const char * argv[]) {
    2. // 浮点数赋给整型,该浮点数小数被舍去
    3. int a;
    4. float x=3.6,y=5.2;
    5. a = x+y;
    6. printf("a=%d\n",a);//8
    7. // 整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中
    8. float f = 10/4; // 10/4等于整数2
    9. printf("f=%f\n",f);//2.000000
    10. printf("f=%f\n",(float)4);//4.000000
    11. printf("f=%d\n",(int)4.00000);//4
    12. return 0;
    13. }
  • 数值溢出

    1. int main(){
    2. float a,b;
    3. // float长度不够储存该数值
    4. a = 123456.789e5;
    5. b = a + 20;
    6. printf("%f\n",a);// 12345678848.000000
    7. printf("%f\n",b);// 12345678848.000000
    8. return 0;
    9. }

    int_t

  • int_t为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型

  • 因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。

    1. int8_t : typedef signed char;
    2. uint8_t : typedef unsigned char;
    3. int16_t : typedef signed short ;
    4. uint16_t : typedef unsigned short ;
    5. int32_t : typedef signed int;
    6. uint32_t : typedef unsigned int;
    7. int64_t : typedef signed long long;
    8. uint64_t : typedef unsigned long long;

    3、void类型

  • void 类型指定没有可用的值。它通常用于以下三种情况下:

    1. 函数返回为空: void exit (int status);
    2. 函数参数为空: int rand(void);
    3. 指针指向 void:void * 的指针代表对象的地址,而不是类型

      4、字符

  • 字符串:会在尾部添加一个“\0”作为字符串结束的标志

  • C语言中不存在字符串变量,字符串只能存在字符数组中,这个后面会讲

    1. char a = 'a';
    2. char b[] = "a";
    3. printf("%d\n",sizeof(a));// 1
    4. printf("%d\n",sizeof(b));// 2