(六)c语言之指针与函数、数组用法

数组指针

指针数组

函数指针

指针函数

指针的指针

数组指针

定义: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

做一个优秀的程序媛
原文地址:https://www.cnblogs.com/oytt/p/13915463.html