--指针
-指针变量
指针变量:专门保存地址的变量
如何查看变量的类型:将变量名取掉,剩下的就是类型
地址:每一块内存单元(1byte)的编号(取地址:取地址符&变量名;打印地址:%p)
(在64位操作系统下所有的指针类型的变量在内存中都是占用8个字节;
在32位操作系统下所有的指针类型的变量在内存中都是占用4个字节)
-解引用操作符
解引用操作符(*):可以获取地址中存放的值
*&scores<==>*(scores地址)<==>scores的值(*和&可以相互抵消)
-数组和指针
&arr(数组变量的首地址)
arr(数组名是数组中首元素的地址)
(特例:sizeof(arr),&arr数组名表示的整个数组)
示例代码:
输出结果:
-大端和小端
大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存中内存的低地址中
小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存中内存的高地址中
-野指针
野指针就是指针中保存的是无效的内存地址(随机的,不正确的,没有限制的)。
成因:
1.指针未初始化
2.指针越界访问
3.指针指向的空间释放
如何规避野指针:
1.指针初始化(int* p=NULL;)
2.小心指针越界
3.指针指向空间释放,及时置空
4.指针使用之前检查有效性
-特殊指针
void*指针
void * 是一种特殊的指针类型,可用于存放任意对象的地址
例如:int a=10;
void* p=&a;
缺点: 由于不知道地址中存放的是何种类型的数据,因此不能直接操作void*指针所指的对象 (如果要使用,需要进行强制类型转换)
NULL指针
例如:int* p=NULL;
含义: 定义指针的时候,一般会把指针的值初始化为0地址,仅仅用于初始化。0地址用户没有执行权限。直接对0地址操作,系统会提示段错误。
例如:int* p=NULL;
*p=800;
正确示例代码:
输出结果: