补充1.>>
补充2.>>指针是不是地址?
指针在内存中占用8(64位),并且,指针里面呢个存地址,指针有自己的地址
指针里面存的地址可以变化,但是地址本身不能变化;
指针由类型概念,地址只是一个16进制的常量;
指针本身可以移动,指向新的数据空间,并且指针移动一位字节数哦不一样(由类型决定)
指针由两层含义:1.>表示一个能存地址的变量(等效于指针变量),2.指还含有数据类型的概念
1.>>全局变量 在所有函数外部定义的变量,
(全局变量默认值为 0) 用于存储一个需要长期存于内存,并需要改变的变量
跟普通变量没区别,只在位置在所以函数之外;
当需要定义一个随程序一只存在于内存中,并可以被其他函数共享的变量的时候;
特点: 生命周期随程序,程序启动创建,程序退出才会销毁;
作用域是其所在位置之下的所有函数都可以共享并改变
变量的使用遵循就近原则,如果函数内有同名变量,那么用函数自己的
如果没有初始化赋值,默认值是0
2.>>结构体 是一种数据类型,是构造日行,里面可以存放不同类型的数据
用于封装不同的数据类型倒一个结构中;
定义:1. 定义结构体类型 struct 结构体类型{ 数据类型1 名称;数据类型2 名称};
2. 定义结构体变量及赋值: struct 结构体类型 变量名={数据1,2,...};
取值: 变量名.结构体元素变量名; 赋值:变量名.结构体元素变量名=新值;
特点:
可在定义结构体类型时同时定义结构体变量名,可定义匿名类型结构体(*注意必须同时初始化变量);
同一个作用域内不可重复定义结构体类型和结构变量,匿名类型结构体除外 可在函数内也可在函数外,效果及用法类似于局部变量和全局变量,也可嵌套定义
3.>>结构体数组 是数组,只不受数组里每一个元素是结构体类型
4.>>结构体的指针 是指针,不是指针类型是结构体类型
存储结构体的地址,操作地址对应的结构体空间里的数据
定义:
取值和赋值:
特点:指针移动对结构体本身没意义.结构体名并不包含第一个元素的地址;
结构体分配内存空间的两个原则:(对齐原则,对齐算法) 1.>每个元素的偏移量(当前元素首地址距离整个结构体首地址的字节数)必须是自己所占字节数的整数倍,如果不够补齐上一个元素的字节数;
2.>整个结构体的字节数必须是其最大元素所占字节数的整数倍,如果不够,最后一个元素填充字节
5.>>枚举 是一种数据类型,称为枚举类型,是构造类型的一种,里面存的都是由别名的整形常量
可以吧整形常量以别迷宫的形式封装成一个整体,便于别的变量识别并取值使用
定义:
enum 枚举类型{元素1,元素2...}或者{元素1=0,元素2=1...}
定义枚举变量及赋值: enum 枚举类型 变量名=应对枚举里的一个元素名
特点: 枚举一旦类型定义成功后里面的数据常量不能再更改; 枚举类型只能是int值,且不能直接用int 常量,需要用别名(建议全部大写)
如果不设定值,那么默认第一个元素是0,以此类推;
同一个作用域内不能出现重复的元素,不同的枚举类型也不行
枚举里的数据更改后,后面的值也一起更改,但是上面的值不变;
6.>>宏定义 是一个替换代码的预处理指令
在编译之前进行 开始替换: #define 被替换内容 替换成的内容
结束替换: #undef 被替换内容 (表示到一行,宏定义失效)
特点:
命名尽量以大写或者小写k开头,便于区分(规范)
被双引号的引起来的不会被替换(被引起来后就是一个字符串)
宏定义只会做代码替换,不急关注任何逻辑,容易出现优先级错误(加括号解决)
替换可以设置作用域,如果不设置,作用域则是这行代码出现到代码的最后一行
|