首页 > C > 指针 阅读:57,774

函数指针与指针函数

< 上一页 二级指针 数组指针与指针数组 下一页 >

8.17.1函数指针

函数名,就是函数的首地址。如果一个指针变量,存放的是函数的地址,那么就把这个指针叫做函数指针。定义函数指针有2中形式:

第一种,首先用typdef定义出函数指针的类型,然后,通过函数指针类型来定义函数指针

第二种,直接用函数的签名来定义函数指针

void print_int(int x)

{

         printf("hello, %d\n", x);

}

typedef void (*F)(int x);//此处定义了一个函数指针类型F

int main(void)

{

         int a =100;

         void (*f1)(int x);

         f1= print_int;//f1是指针定义出来的函数指针,把函数print_int赋值给f1

         f1(a);

         F f2= print_int; // f2是通过函数指针类型F定义出来的函数指针,把print_int赋值给f2

         f2(a);

         print_int(a);

         return 0;

}

8.17.2 指针函数

指针函数:即返回指针的函数。比如下面的代码中,我们尝试着调用get_memory()获取一个内存,用来存放“hello world“这个字符串,那么就可以将get_memory()设置成为一个返回指针的函数:

char *get_memory();

int main(void)

{

    char *p = NULL;//p是指针,做为实参,初始值为NULL

    p=get_memory();//通过该函数,为p分配一块内存。如何定义get_memory函数?

    strcpy_s(p, 100,”hello world”);

    printf(“%s\n”, p);

    free(p);

    p=NULL;

    return 0;

}

char *get_memory()

{

    return (char *)malloc(100);

}

 

注意:指针函数不能返回局部变量的指针(地址),只能返回堆上内存的地址,或者函数参数中的内存地址。因为局部变量存放在栈上,当函数运行结束后,局部变量就被销毁了,这个时候返回一个被销毁的变量的地址,调用者得到的就是一个野指针。

注意下面几个定义的区别:

int f();//普通的函数

int *fpi();//指针函数

int (*pfi)();//函数指针

< 上一页 二级指针 数组指针与指针数组 下一页 >

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注