• c语言学习之基础知识点介绍(十五):函数的指针


    一、函数的指针的介绍

    /*
     
     函数指针:
            函数的指针,本质上一个指针
     
        指向函数的指针,就是一个函数指针。
     
     
     
     回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令
     
            先存在内存里面,然后CPU读取内存里的指令,既然存到内存里面,一定有一个地址
     
     
     所以,我们可以定义一个指针变量保存函数的地址,那么这样的指针变量就是函数指针。
     
        函数指针定义语法:
                    返回值类型  (*指针变量)(参数列表);
                
             例:     void (*pTest)(); //变量名:pTest   这个指针指向的是无返回值无参数的函数类型。
             
                     void (*pTest2)(int);//变量名:pTest2  这个指向的是无返回值有1个int类型参数的函数。
     
            tips:直接复制函数头,把大括号去掉,把函数名用一个小括号括起来,函数名前面加一个*,函数名重新改成变量名。
     
        指针变量赋值:
    
                语法: 
                    指针变量名 = 函数名;
                
                例: pTest = test;
     
                因为函数名本身就是一个指向自己函数的地址
     
                注意:函数名后面千万不要加()。
     
     
                在声明的时候初始化
     
                    返回值类型 (*指针变量名)(参数列表) = 函数名;
     
                    例:void (*pTest)() = test;
     
        函数指针的使用:
                1.指针变量名(参数列表);
                    pTest();
                    pTest2(90);
        
                2.(*指针变量名)(参数列表);
     
                例: (*pTest)();
                    (*pTest2)(90);
    */

    二、函数指针的应用

           1、把函数当做参数传递。

           2、把函数当做返回值。

    /*
    类似于支付宝问题,银行不可能把操作银行卡的权限交给支付宝,所以,当用户选择银行后,需要把该调用的银行付款方法传递给支付宝,然后支付宝再去调用(只是一个比喻,现实中支付宝不会这样)。具体的代码编写,可以自己动手,我就不传了。
    */

    三、结构体指针的使用

    /*
     
     结构体的变量也要开辟空间,所以也会有一个内存首地址
     
     那么我们把这个结构体变量的内存首地址保存起来,就是结构体指针
     
     
     定义的语法:
     
            类型 *指针变量名;
     
            struct 结构体名 *指针变量名;
     
     
     结构体指针的赋值:
            指针变量名 = 地址;
            指针变量名 = &结构体变量;
            例如:Person p = {"刘德华",88};
             Person *ppt;
             ppt = &p;
     
        声明的时候初始化
             Person p = {"刘德华",88};
             Person *ppt = &p;
     
        通过结构体指针访问结构体变量的成员:
     
                1.使用*来访问
                    语法: (*指针变量名).成员名;
                    (*ppt).age;
     
                2.使用->来访问
                    语法: 指针变量名->成员名;
                     ppt->age;
     
        赋值:
                 1.使用*来访问
                 语法: (*指针变量名).成员名 = 数据;
                 (*ppt).age = 16;
                 
                 2.使用->来访问
                 语法: 指针变量名->成员名 = 数据;
                 ppt->age = 16;
     
    */
    
    #include <stdio.h>
    
    typedef struct{
        
        char name[50];
        int age;
        
    }Person;
    
    int main(int argc, const char * argv[]) {
        
        Person p = {"刘德华",88};
        
        Person *ppt;
        
        ppt = &p;
        
        //*ppt; //*ppt 就等同于p
        
    //    printf("age=%d
    ",(*ppt).age);
        
        printf("age=%d
    ",ppt->age);//88
    
        (*ppt).age = 16;
        
        printf("age=%d
    ",p.age);//16
        
        ppt->age = 28;
        printf("age=%d
    ",p.age);//28
    
        return 0;
    }
  • 相关阅读:
    第12月第30天 love2d
    第12月第29天 cocos quick manual
    cpu test
    learning armbian steps(10) ----- armbian 源码分析(五)
    Linux command nmon
    learning ddr Electrical Characteristics and AC Timing
    learning ddr tRP and tRP tRTP CL tRAS
    进入Windows之前发出警告
    向系统日志 写入自定义数据
    创建并写入自定义日志信息
  • 原文地址:https://www.cnblogs.com/bobo-pcb/p/4936534.html
Copyright © 2020-2023  润新知