0
点赞
收藏
分享

微信扫一扫

指针进阶篇(下)

天涯学馆 2022-04-13 阅读 80
c语言

目录

一、函数指针

0X01 函数指针概念

0X02 函数指针的定义方式

0X03 函数指针的使用

 二、函数指针数组

0X01函数指针数组的概念

0X02函数指针数组的定义

0X03函数指针数组的使用 

 三、指向函数指针数组的指针

 0X01 函数指针数组指针的定义

 0X02 函数指针数组指针的使用


一、函数指针

0X01 函数指针概念

函数中指针:指向函数的指针,存放函数地址的指针

函数的地址是什么呢?

0X02 函数指针的定义方式

上代码:

int Add(int x,int y)
{}
int main()
{
	printf("%p\n", Add);
	printf("%p", &Add);

	int (*pf)(int, int) = &Add;
	return 0;
}

0X03 函数指针的使用

上代码:

 分析下列代码:

代码一:

(*(void (*)()0))();

 代码二:

void (*signal(int, void(*)(int)))(int);

 二、函数指针数组

0X01函数指针数组的概念

如果要把函数的地址存放到一个数组中,那这个数组就叫做函数指针数组。

0X02函数指针数组的定义

0X03函数指针数组的使用 

实现一个计算器,可以进行简单的加减乘除运算。

使用函数指针数组改进代码; 

#include <stdio.h>
void menu()
{
    printf("*************************\n");
    printf(" 1:add             2:sub \n");
    printf(" 3:mul             4:div \n");
    printf("****     0: exit     ****\n");
    printf("*************************\n");
}
int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}
int mul(int a, int b)
{
    return a * b;
}
int div(int a, int b)
{
    return a / b;
}
int main()
{
    int x, y;
    int input = 1;
    int ret = 0;
    int (*pf[5])(int, int) = { NULL,add,sub,mul,div };
    do
    {
        menu();
        printf("请选择:");
        scanf("%d", &input);
        if (input == 0)
        {
            printf("退出计算器");
        }
        else if (input >= 1 && input <= 4)
        {
            printf("请输入两个操作数");
            scanf("%d %d", &x, &y);
            ret = pf[input](x,y);
            printf("ret = %d\n", ret);
        }
        else
        {
            printf("选择错误,从新选择");
        }
    } while (input);

    return 0;

 三、指向函数指针数组的指针

0X01 函数指针数组指针的定义

定义:指向函数指针数组的指针,指针指向一个数组,数组的元素是函数指针

 0X02 函数指针数组指针的使用

上代码:

#include <stdio.h>
int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}
int mul(int a, int b)
{
    return a * b;
}
int div(int a, int b)
{
    return a / b;
}

int main()
{
    int (*pf[4])(int, int) = {add,sub,mul,div};
    int (*(*pff)[4])(int, int) = &pf;//是整个数组的地址
    int i = 0;
    for (i = 0; i < 4; i++)
    {
        int ret = (*pff)[i](4, 2);
       //int ret = pff[0][i](4, 2);//也可以
        printf("%d\n", ret);
    }
	return 0;
}

举报

相关推荐

0 条评论