数组指针
指针数组
函数指针
指针函数
指针的指针
数组指针
定义:int (*p)[n];
理解:p是一个指针,指向一个包含 n 个 int 类型的数组;
含义:()的优先级高,(*p) 是一个指针,int 修饰数组的内容,n 数组的个数;
指针数组
定义:int *p[n];
理解:数组p 包含 n 个指向 int 类型数据的指针;
含义:[ ] 的优先级要比 * 要高,p[n] 构成一个数组,数组名为 p,int* 修饰的是数组的内容,即数组的每个元素;
阅读技巧
(1)从最里层的圆括号中未定义的标示符看起
(2)首先往右看,再往左看
(3)遇到圆括号或方括号时可以确定部分类型,并调转方向
(4)重复2、3步骤,直到阅读结束
请阅读以下定义
int (*p)(int*, int (*f)(int*));
int (*p[5])(int*)
int (*(*p)[5])(int*);
int (*(*p)(int*))[5];
void (*func(void (*p)(void *)))(void *)
函数指针
定义:
int (*f) (int x);
f = GetFunc; // 将func函数的首地址赋给指针f
本质:
指向函数的指针变量,指针变量包含了函数的地址,可以通过它来调用函数
使用:
(1)简单函数指针用法
int GetFunc(int x) {return 2};
int (*f) (int x); // 定义一个函数指针
void main()
{
f = GetFunc; // 将GetFunc的首地址赋给指针变量f
(*f)(2); // 使用
}
(2)使用typedef方法
int GetFunc(int x) {return 2};
typedef int (*f) (int x); // 定义一个函数指针
void main()
{
f a = GetFunc; // f重命名为a
a(2); // 使用
}
指针函数
定义:
int *f(x,y);
本质:本质是函数,返回类型是某一类型的指针
指针的指针
char ** p; // 指针的指针(二级指针)
char ***p; // 指针的指针的指针(三级指针)
char ****p; // 指针的指针的指针的指针(四级指针)
用法:
char a = 'B';
char *p = &c;
char **p = &p;
回调函数
- 回调函数是利用函数指针实现的一种调用机制;
- 调用者不知道具体事件发生时,需要调用的具体函数;
- 被调函数不知道何时被调用时,只知道需要完成的任务;
- 当具体事件发生时,调用者通过函数指针调用具体函数;
- 回调机制中的调用者和被调用者互不依赖;
typedef int (*Teacher)(int); void ClassLesson(Teacher T, int arg) { printf("课堂教程"); int result = T(arg); printf("价位总共:%d ", result); } int Match(int cnt) { int i = 0, ret = 0; for(i = 0; i<cnt; i++) { printf("上1次课程 "); ret ++; } return ret; } int main() { ClassLesson(Match, 5); return 1; }
---参考:https://www.cnblogs.com/5iedu/protected/p/5350940.html