1,全部变量:
在所有函数外部定义的变量,称为全局变量
2,有什么用:
用于存储一个需要长期存于内存,并需要改变的变量
3,怎么用:
跟普通变量没区别,只在位置在所有函数之外
4,什么时候用
当需要定义一个随机程序一直存于内存中,并可以被其他函数共享的变量时候
5,有什么特点
1,生命周期跟随机程序, 程序退出才会销毁
2,作用域是其他所在位置之下的所有函数,都可以共享并改变
3,变量的使用遵循就近原则,如果函数内有同名变量,那么用函数自己的
4,如果没有初始化赋值 默认值就为0
2.结构体:
是一种数据类型, 是构造类型,里面可以存不同类型的数据
1.有什么用:
用于封装不同的数据类型到一个结构中,方便使用
2,怎么用:
1.定义结构体类型 struct 结构体类型{数据类型1;数据类型2;数据类型3;};
2.定义结构体变量赋值:struct结构体类型 变量名={数据1,数据2...};
变量名.结构体元素变量名;赋值:变量名.结构体元素变量名 = 新值;
3.什么时候用:当需要把相关联的不同数据类型封装起来一起使用的时候
3.特点:1.可以在定义结构体类型是同时定义结构体变量名,可定义匿名类型结构体
2.同一作用域内不可重复定义结构体类型和结构变量,匿名类型结构体除外
3.可在函数内也可在函数外,效果及用法类型与局部变量和去全部变量,也可嵌套定义
4.可同时在函数内外定义同一个类型,使用同样遵循就近原则,结构体变量也是如此.
3.结构体数组:是数组,只不过是数组里面每一个元素是结构体类型
1有什么用:用于存储多个有关联的结构体
2.怎么用:定义及初始化赋值:struct 结构体类型 数组名[长度]={结构体1,结构体2};
如: struct Person{char *name;int age;};
struct Person{"ithema",2}; struct Person per1={"itcast",3};
struct Person arr[2]={per,per1};
取值:数组名[角标];单独赋值:数组名[角标]=新的结构体
如: struct Person per3 =arr[0];
什么时候用
当需要多个有关联的结构体,并作为一个整体使用
特点:遵循数组的特点
4.结构体的指针
1.是指针,指针类型是结构体类型
2.用于存储结构体的地址,并操作地址对应的结构体空间的数据
3.如:
struct Person{char *char;int age}; struct Person per={"ithema",2};
strucrt Person *p =&perl
取值:(*指针名).结构体元素名; 指针名->结构体元素名;(结构体独有的用法)
赋值:(*p).结构体元素名=新值; 指针名->结构体元素名=新值
(*p).name, (*p).age,或 p->name, p->age;
当需要指针操作结构体时
指针移动对结构体本身没有意义,结构体名并不包含第一个元素的指针
5.枚举:是一种数据类型,称为枚举类型,是构造类型的一种,里面存的都是别名的整型常量
可以把多个整型常量以别名的形式封装成一个整体,便于别的变量识别并取值使用
定义枚举类型 enum 枚举类型{元素1,元素1,....}或{元素1=0;元素2=1}
定义枚举变量及赋值:enum 枚举类型 变量名=对应枚举李一个元素名
变量名=枚举元素名
什么时候用:当一个变量只有固定的多个int取值范围时
特点:枚举类型只能是int值,且不能直接使用int常量,需要用别名
如果不设定值,那么默认第一个元素是0,依次类推
同一个作用域内不能出现重复的元素,不同的枚举类型也不行
6 宏定义:是一个替换代码的预处理指令
可以在编译之前进行代码替换
开始替换:#define 被替换的内容
如,#define Klength 6表示从这行开始下面所有代码中Klength 替换成6
结束替换:#undef 被替换内容 如: #undef klength 表示到一行,宏定义失效
当需要用一些重复性代码或简单函数运算时,可以用宏定义,提高效率
特点:命名尽量以大写或小写K开头.便于区分
被双引号的引起来的不会被替换
宏定义只会做替换代码,不会关注任何逻辑,容易出现优先级错误(加括号解决)
替换可以设置作用域,如果不设置,作用域则是这行代码出现到代码的最后一行bi |
|