C语言基础
- 指针
- 野指针
- 空地址
- 二级指针
- 子函数实现两数交换
- 总结
指针
指针是一个数据类型,指针是一个保存地址的数据类型
//定义变量
int a;
//定义指针
int* p;//定义了一个名叫p的指针
//int与“指针”分别是修饰a和p的数据类型
地址:内存单元的标号
指针的大小:在32OS,大小为4字节;在64OS,大小为8字节
<存储类型> 数据类型 指针名;
int * p;
//一个指向int类型变量的指针
//编译器分配4字节空间,起名为p,存放int类型变量的地址
指针的数据类型:去掉指针名,剩下的就是指针的数据类型
int* p;
//p的数据类型是int*
tip----总结*的用法
- 双目运算符 ----乘法 a*b
- 单目运算符 ----取值 *p
- 定义变量时,表示指针这种数据类型
指针变量中只能保存他指向同种类型的变量的地址
野指针
不知道指向的指针(局部指针,未初始化,随机指向)
避免野指针----先指向NULL,0号地址
空地址
0号地址:没有指向的指针(NULL)
注意:禁止操作
特点:不读不写(这片空间不能保存别的地址,只能保存NULL,即就是不能指向,但是别的指针可以指向它)
二级指针
指针的指针(保存指针的地址)
二级指针的内存空间:用来保存一级指针的地址
<存储类型> 数据类型 指针名;
int** pp;
子函数实现两数交换
此处为值传递
调用函数的时候,需要操作地址里面的值,需要传地址,此时为地址传递
总结
1、指针指向的数据类型:去掉*和指针名,剩下的就是指向的数据类型
int *p ---- 指针指向int类型
int ** pp ---- 二级指针指向
int *** ppp -----三级指针指向int**类型
2、指针的数据类型:去掉指针名,剩下的就是指针的数据类型
int * p ----- 指针的数据类型int *
int ** pp ---- 二级指针的数据类型int **
int ***ppp ----三级指针的数据类型int ***
3、指针所能访问到的空间的大小,由其指向的数据类型决定
char * p ----访问char 类型,1byte
int * p ---- 访问int类型,4byte
int **pp ----访问int*类型,4byte(32OS)
char ***ppp ---- 访问char **类型 ,4byte(32OS)