数据类型是将现实中的客观事物进行抽象化的处理,可以用来确定系统为每个数据类型分配的空间大小,同时方便人们区分出每个数据所表示的含义。
一、数据类型分类
1、基本类型---编译器内置的类型
每个基本类型都有signed和unsigned,空间大小是固定的 ,不用unsigned和signed修饰的变量,默认都是signed类型
在一定范围之内,肯定有一个整数和一个负数的补码是一模一样的,这时候我们是需要通过类型来进行区分。详见下图。

内存空间单位:比特(bit)<字节(Byte)<千字节(KB)<兆字节(MB)<千兆字节(GB)
高精度向低精度数据赋值的时候,只保留低字节数据,只保留能保留的比特位。
低精度向高精度赋值直接拷贝,如果为unsigned高字节补0,如果signed高字节补符号位。
2、构造类型---程序员自己创建的合法的数据类型
构造类型的内存大小是不固定的,取决于程序是怎么定义。
数组:是一组相同类型的元素的集合。
结构体:是一组不同类型的元素的集合
共用体(联合体):一组不同类型的元素共用一段空间
枚举:列举某个范围内的取值
3、指针类型---指向合法类型空间的指针(一般指的是指针变量)
系统给到指针类型变量的大小是固定的,具体大小取决于系统的位数。
基本类型指针
构造类型指针
由void构成万用指针
4、空类型--无值类型
void和函数组成:无返回值,无参数
void和指针组成:通用类型指针
二、变量和常量
C程序中的数据以变量、常量表示,他们都具有类型属性。
1、字面量(literal)或称常量 是指数据在源程序中直接以值的形式呈现,在程序运行中不能被修改(修改常量代码会报错),表现为整型、浮点型和字符串类型。
//整型常量
10 18//是十进制常量,逢十进一
0777 0234 //是八进制常量,逢八进一,书写的时候前面需要加0
0x A8 0x1F//是十六进制常量,逢十六进一,书写的时候前面加上0x
计算机在底层存储数据就是用二进制保存的
2、变量 是在程序运行中可以被修改的量,本质上指存储特定属性的数据的内存单元 。它用来存放数据,这个存储单元存放的数据就是变量的值,这个值在程序运行期间时可以改变的。
(1)变量的定义 指编译器为变量分配存储空间,还可以为变量指定初始值(或称为初始化)。
(2)变量的定义语法格式:变量类型+变量名字+初始值+分号; (中间要有空格,初始值可以省略)
变量名会关联内存地址,操作系统在访问存储单元时,就要知道内存地址。操作变量名实际就是操作内存(系统会把内存分割成若干个空间,并进行编号,这个编号就是内存地址,没增加一个字节,地址就加1)
(3)整型变量
整型数据在内存中,以二进制的补码形式进行存储,最高位为符号位,1:负数;0:纯整数,其他为数字位
(4)常变量
定义变量时,使用常量修饰符const,则表示这个变量在初始化后,就不能赋值,是只读变量
c
const double pi =3.14;//pi的值被初始化为3.14,pi为常量,之后在其作用域不能被修改,否则会报错,提示是只读变量
double const PI = 3.14;//同上
const常量有数据类型,编译器可以对类型进行安全检查。
(4)宏变量
#define PI 3.1415926;//PI是宏名
在C程序中,一个变量有且只有一个定义,在程序中需要引用其他程序文件中定义的变量时,就需要进行声明。
3、变量名的命名规则
C语言中命名标识符的时候,需要以数字、字母、下划线组成的规则,并且只能由下划线和字母开头。
编程规范
<1>在变量命名时,一定要 避免下划线开头*,一般下划线开头的都是用于编译器编译的符号
<2>在给变量对象取名字时,尽量做到"见其名知其意"(eg: int sum)
变量名太长可以用简写,或用注释解释
尽量使用驼峰命名,eg:int minNumber
<3>要注意缩进
缩进:可以让我们的代码层次和逻辑更加清晰,包含关系更加明明确;
缩进的方式:tab键,可以自动往后填充固定数量的空格
4、变量的访问
变量的读值 :从变量中取值,实际就是通过变量名找到它所关联的存储单元,从存储单元里面取值。这时候变量名一般在赋值符号(=)的右边。用来表示变量的值,称为右值。
变量的写值:给变量赋值(写),实际就是通过变量名找到它所关联的存储单元,把数据写入到这个存储单元中,覆盖原来的值。这个时候变量名一般在赋值符号(=)的左边,称为左值。
c
int x;//定义了一个int类型的变量x,没有赋值。里面存在的值取决于编译器的处理。(如处理了一般为0,否则一般为随机值)
x=10;//将常量10存储到x所绑定的内存存储单元中
printf("%d\n",x);//系统从x所绑定的内存单元取出值,并打印输出到终端上。
数据类型并不是给计算机来看的,而是给程序员来看。