zoukankan      html  css  js  c++  java
  • (六)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

    做一个优秀的程序媛
  • 相关阅读:
    手机号码 正则表达式
    邮政编码的正则表达式
    对象为null,调用非静态方法产生空指针异常
    文件找不到异常(FileNotFoundException)
    数组下标越界异常解决方法
    空指针异常的解决方法
    需求:打印九九乘法表
    创建简单线程
    ·博客作业06--图
    博客作业05--查找
  • 原文地址:https://www.cnblogs.com/oytt/p/13915463.html
Copyright © 2011-2022 走看看