指针函数、函数指针、指针函数数组

一、指针函数

概念:本质上是函数,函数的返回值是地址

1、定义格式:
存储类型 数据类型 *函数名(形参)
{
    函数体;
    return 地址;
}
局部变量 -->  栈区、自动开辟自动释放
            生命周期:函数调用结束空间释放
            作用域:函数体内,定义未初始化值为随机值。
全局变量 -->  静态区(.bss-定义值0  .data-定义的同时初始化)
            生命周期:程序结束空间释放,
            作用域:整个文件,定义未初始化值为0
堆区 ----->程序员使用时开辟,用完需要手动释放
malloc:手动开辟堆区空间函数
    #include <stdlib.h>
    void *malloc(size_t size);
    功能:在堆区开辟空间
    参数:size:开辟空间的字节大小
    返回值:成功 -->开辟空间的首地址
           失败 -->NULL
free:手动释放堆区空间
    void free(void *ptr) //手动释放堆区空间
    功能:释放堆区空间
    参数:ptr:要释放空间的首地址
    返回值:无

  • 函数指针

本质:本质上是指针是指向一个函数的指针。

函数名就是函数的首地址。

1、定义格式
存储类型 数据类型 (*函数指针变量名)(形参列表)
int add(int a,int b)
{
    return a+b;
}
int sub(int c,int d)
{
    return a-b;
}
定义指针指向这个函数:
int (*p)(int,int);
= add;// 相当于用 p代替add访问函数,指针调用函数
2、通过函数指针调用函数
    函数指针变量名(参数)-->指针代替函数名去调用函数
    *函数指针变量名)(实参)-->不常用

用法:

当一个函数指针指向一个函数,就可以通过这个指针来调用该函数

int add(int a, int b)
{
    return a + b;
}
int sub(int c, int d)
{
    return c - d;
}


int main(int argc, char const *argv[])
{
    int (*p)(int, int) = add;
    printf("%d\n", p(1, 2));
    return 0;
}

函数指针可以将函数作为参数传递给其他的函数调用

举例:

1char *fun(int a,short *b);
定义一个函数指针来指向这个函数:
char *(*p1)(int,short *)=fun;
2void fun1(char *sp,int **st,int n)
定义一个函数指针来指向这个函数:
void (*p2)(char *,int **,int)=fun1;
3void *fun2(int (*sp)[3],int m);
定义一个函数指针来指向这个函数:
void *(*p3)(int (*)[3],int)=fun2;

  • 函数指针数组

本质是数组,元素是同类型的函数指针

  1. 定义格式:

存储类型 数据类型  (*函数指针数组名[元素个数])(形参列表)

#include <stdio.h>

int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}
int  sul(int a, int b)
{
    return a * b;
}
int less(int a, int b)
{
    return a % b;
}

int main(int argc, char const *argv[])
{
    int (*sp[4])(int, int) = {add, sub, sul, less};  // 函数指针数组的声明
    int ret = sp[1](1, 3);  // 函数的调用
    printf("%d\n", ret);
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满山的猴子我的腚最红

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值