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\n",(*ppt).age);
    
    printf("age=%d\n",ppt->age);//88

    (*ppt).age = 16;
    
    printf("age=%d\n",p.age);//16
    
    ppt->age = 28;
    printf("age=%d\n",p.age);//28

    return 0;
}

 

posted @ 2015-11-05 10:14  祁临芯  阅读(288)  评论(0编辑  收藏  举报
友情链接:初心商城