变量的类型
作用域来分:
1.局部变量:
1>在函数,代码块中的变量
2>作用域:定义变量那一行开始,直到代码块结束
3>生命周期:从定义开始分配存储空间,到代码块结束,被系统回收
2.全局变量
1>函数外部的变量
2>作用域:定义那一行开始到文件结尾,在该变量下面的所有函数都能够访问
3>生命周期:程序启动就分配空间,直到程序结束
4>默认初始值是0
构造类型:
1.数组:由多个相同的数据类型构成
2.结构体:可以由多个不同类型的数据构成
定义结构体:struct 结构体名{ 属性};//这里定义的结构体名作为类型名,用来定义结构体变量。语法:struct 结构体名 结构体变量名。
如何访问变量的属性:变量名.属性名=XXX;
结构体变量在赋值的时候,只能初始化的时候赋值或者通过变量名.属性名来一一赋值。
在初始化进行赋值的时候,可以通过.属性名来对相应属性赋值,如果不写属性名,那么只能一一对应的赋值。
结构体变量所占的 存储空间就是该结构体属性所占空间的总和,并且是最大属性所占空间的倍数。(补齐算法)
结构体类型中的属性的内存分配是按顺序,从小到大分配的。
为什么可以char *p="abc";不可以int *p={1,2,3}?
3.定义结构体变量:
1>。先定义结构体类型,再用类型名定义变量
2>。定义结构体类型和变量的语句结合成一句
3>。在2的基础上,不写类型名,坏处是不能重用
结构体类型也有作用域。
一个结构体变量可以看成是一个整体,只是结构体变量有多个属性。
在获取地址的时候要在结构体变量名前加上&。与int double char类似。
4.结构体数组:struct 结构体类型名 数组名[]={{},{},{}}
5.指向结构体类型的指针:
struct 结构体类型名 *p=&结构体变量;
访问结构体的某个属性:p->属性 或者 (*p).属性
6.结构体嵌套定义:结构体当中有结构体类型的属性
枚举类型:
enum 类型名 {固定取值}
enum week { Monday,thurday,wesday,Saturday,Sunday }
使用场合:当我们的变量需要固定的几个值。
一、基本数据类型
1.int
1> long int、long:8个字节 %ld
2> short int、short:2个字节 %d %i
3> unsigned int、unsigned:4个字节 %zd
4> signed int、signed、int:4个字节 %d %i
2.float\double
1> float :4个字节 %f
2> double:8个字节 %f
3.char
1> 1个字节 %c %d
2> char类型保存在内存中的是它的ASCII值
'A' --> 65
二、构造类型
1.数组
1> 只能由同一种类型的数据组成
2> 定义:数据类型 数组名[元素个数];
2.结构体
1> 可以由不同类型的数据组成
2> 先定义类型,再利用类型定义变量
三、指针类型
1.变量的定义
int *p;
2.间接操作变量的值
int a = 10;
p = &a;
*p = 20;
四、枚举类型
使用场合:当一个变量只允许有几个固定取值时