0x01 二级指针 && 指针数组

用来记录普通类型存储区地址的指针叫一级指针
指针变量存储区的地址可以记录在二级指针里
声明二级指针需要使用到 ** (两个星号)
在二级指针变量名称前使用两个 ** 可以找到捆绑的普通变量存储区
在二级指针变量名称前使用一个 * 可以找到捆绑的一级指针存储区

1
2
3
4
5
6
7
8
9
#include "stdio.h"
int main(){
int num = 0;
int *p_num = #
int **pp_num = &p_num;
**pp_num = 10; //代表num变量的存储区
*pp_num = NULL; //代表 p_num 指针变量的存储区
return 0;
}

二级指针可以代表指针数组,但是不能代表二维数组
无类型指针有可能实际代表的是一个二级指针
被调用函数可以通过二级指针形式参数把一个地址数据传递给调用函数

1
2
3
4
5
6
7
8
9
10
11
//demo 二级指针做形参,给一级指针赋nil
#include "stdio.h"
void set_null(int **pp_num){
*pp_num = NULL;
}
int main(){
int num = 0;
int *p_num = #
set_null(&p_num);
return 0;
}

0x02 函数指针

函数名称可以用来表示函数的地址
函数指针可以用来记录函数的地址
函数指针声明可以根据函数声明变化得到

1
2
3
4
5
6
7
8
9
10

int add(int a,int b){
return a+b;
}
int main(){
int (*p_func)(int,int) = NULL; //函数指针声明
p_func = add; //赋值函数名称
printf("%d",p_func(4,5));
return 0;
}