【C语言学习笔记】——数据类型
数据类型基本类型整数类型标准整型浮点类型枚举类型声明基本语法void类型派生类型在C语言中数据类型可以分为四种类型基本类型、枚举类型、void类型和派生类型。它们决定了变量占用的内存大小、存储方式和能执行的操作。基本类型基本类型是算术类型包括整数类型、浮点类型。整数类型标准整型int整型有符号占用4字节内部最高位为符号位0正1负取值范围-2,147,483,648 ~ 2,147,483,647unsigned int无符号整型占用4字节32位全部用来记值。取值范围0 ~ 4,294,967,295。char字符型存放单个字符或很小的整数占用1字节。unsigned char无符号字符型。short全称为short int短整型占用2字节有符号范围-32,768 ~ 32,767无符号范围0 ~ 65,535。long全称为long int长整型占用4字节windows或8字节linux。普通整数直接用int范围足够处理速度通常最快和 CPU 字长匹配是默认选择。需要省内存或者数值很小用short比如处理像素坐标0-1023、存储学生年龄等用 short 节省一半空间。但要注意运算时它会被自动提升为 int所以赋值回去可能需要强制转换。浮点类型float单精度 占用4字节布局为 | 1 位符号 | 8 位指数 | 23 位尾数小数部分 |符号位0正1负。指数位用移码存储实际指数存储的8位二进制值换算为十进制-127。尾数位存储小数部分即小数点后面的位。“隐含前导1”如果我们将十进制数换算成1.xxxxxx × 10^n形式小数点前默认有一个数但我们在二进制中换算成同样的类型小数点前面永远有个1在二进制中非零数字只有1。标准化后小数点前一定是1所以1没有必要存储。所以存储float型数首先将数换算成二进制标准形式类似1.01101 × 2^-3其中-3是指数01101位尾数部分后面再补18个0填满23位。double双精度 占用8字节布局为| 1 位符号 | 11 位指数 | 52 位尾数小数部分 |指数从 8 位扩到 11 位尾数从 23 位扩到 52 位。long double 扩展精度极高精度需求在不同系统下位布局不同。枚举类型声明枚举用来定义一组具有离散值的常量。 枚举类型用于为程序中一组相关常量取名字。语法格式enum 枚举名 {枚举元素1,枚举元素2,……};比如enumcolor{RED,GREEN3,BLUE};第一个枚举成员的默认值为整型的0后续的值在前一个成员的基础上加1初始值我们也可以指定。这里举例的GREEN3则输出值为RED0,GREEN3,BLUE4。基本语法三种方式定义枚举变量1、先定义枚举类型再定义枚举变量enumDAY{MON1,TUE,WED,THU,FRI,SAT,SUN};enumDAYday;特点enum DAY成了一个有名字的类型标签可以在后面的代码中反复使用。enumDAYtoday;enumDAYtomorrow;enumDAYweek[7];这是最清晰的写法当你需要在多个函数、多个文件里使用同一种枚举类型时首选这种方式。结构体、联合体的定义也是这种风格。2、定义枚举类型的同时定义枚举变量enumDAY{MON1,TUE,WED,THU,FRI,SAT,SUN}day;特点类型标签enum DAY仍然被定义因此后面依然可以用enum DAY声明其他变量同时立即声明了变量day。本质上和第 1 种没有区别只是少写了一行enum DAY day;。3、省略枚举名称直接定义枚举变量enum{MON1,TUE,WED,THU,FRI,SAT,SUN}day;特点没有标签名enum是匿名的。因此你无法再声明其他同类型的变量只能使用已经定义的day。这种形式适合只想要一组整数常量此时甚至可以不定义变量写成enum { MAX 100 };。定义一个唯一的变量且不需要在其他地方用到该类型。C的枚举变量本质上还是int。void类型表示“没有返回值”、表示“没有参数”、表示“任意类型的指针”。函数返回为空当函数只是执行一个动作不需要返回任何值返回值就写成void。函数参数为空如果void位于函数参数的位置int func(void)表示函数没有参数传任何参数都会报错。int func()表示函数未指定可以接受任意数量、任何类型的参数。指针指向voidvoid * 是C语言中最灵活的指针类型可以指向任意类型的数据。代表的是对象的地址而不是类型。派生类型在基本类型的基础上通过组合或推导构造出来的新类型。主要包含五种数组、指针、结构体、联合体、函数类型。后续单独列出来。