✨Blog:🥰不会敲代码的小张:)🥰
🉑推荐专栏:C语言🤪、Cpp😶🌫️、数据结构初阶💀
💽座右铭:“記住,每一天都是一個新的開始😁😁😁”
💀本章内容:《C语言指针进阶》的介绍✨
前章
参考前章指针内容->初级指针入口<-
- 前章内容:
- 1.指针是什么
- 2.指针和指针类型
- 2.1指针的解引用
- 3.野指针
- 4.指针运算
- 5.指针和数组
- 6.二级指针
- 7.指针数组
目录
- 前章
- 指针数组
- 数组指针
- ---------------------------------------------------
- 指针数组:是一个数组,数组的元素都是指针
- 数组指针:是一个指针,它指向一个数组
- ---------------------------------------------------
- 函数指针
- 函数指针数组
- 指向函数指针数组的指针
- 回调函数
指针数组
arr是一个数组,有5个元素,每个元素的类型是int*
int main()
{
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int e = 50;
int* arr[5] = { &a, &b, &c, &d, &e };//整形指针的数组
return 0;
}
数组指针
能够指向数组的指针
int main()
{
int arr[5] = { 0,1,2,3,4 };//int的数组
int(*parr)[5] = &arr;//指向arr数组的指针数组,记得要取地址
for (int i = 0; i < 5; ++i)
{
printf("%d ", arr[*(*parr) + i]);
}
return 0;
}
---------------------------------------------------
指针数组:是一个数组,数组的元素都是指针
数组指针:是一个指针,它指向一个数组
---------------------------------------------------
函数指针
函数指针是指向函数的指针变量。因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
其通用表达式为:返回类型 (*名称) (参数)
int Add(int x, int y)
{
return x + y;
}
int main()
{
int (*pfuc)(int, int) = &Add;//函数指针的定义
//int n = Add(100, 200);//正常调用函数
int n = (*pfuc)(100, 200);//使用函数指针调用
printf("%d\n", n);
return 0;
}
函数指针数组
parr 先和 [] 结合,说明 parr是数组,数组的内容是什么呢?是 int (*)() 类型的函数指针
把函数的地址存到一个数组中,那这个数组就叫函数指针数组
int (*parr[10])();
指向函数指针数组的指针
指向函数指针数组的指针是一个 指针 ,指针指向一个 数组 ,数组的元素都是 函数指针
//一个指向有5个元素 每个元素是指向一个返回值为void函数的数组的指针
void (*(*p)[5])(const char*);
回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应
void Callback_1(int x) ///回调函数
{
printf("Hello, this is Callback_1: x = %d ", x);
}
void Fuc(int x, void (*Callback)(int)) // 函数指针定义作为参数
{
Callback(x);//通过函数指针调用Callback_1
}
int main()
{
Fuc(4, Callback_1);
return 0;
}