C语言:再探C语言指针

        若对指针的理解还有问题的或不懂得地方,可通过此链接:https://blog.csdn.net/FSRMWK/article/details/136494868?spm=1001.2014.3001.5501,进行复习与补充

        在上期我们从指针的基础概念出发,再到对常见指针类型的讲解,相比大家对与指针的理解应该不成问题。这期博客主要就是对:函数指针应用(回调函数)、函数指针数组的应用(转移表)、与指针有关联的知识点等进行深入讲解

 一、指针的应用

1.转移表
  • 转移表就是函数指针数组;将所需要的函数的指针,存储在一个数组中,通过数组得下标去调用函数,这样就能避免代码的冗余。使得代码又清晰,又简化。
  • //转移表代码实践->计算器功能得实现
    #include<stdio.h>
    void menu()
    {
    	printf("************************\n");
    	printf("**** 0.exit   2.sub ****\n");
    	printf("**** 1.Add    3.Mul ****\n");
    	printf("**** 4.div    5.Mor ****\n");
    	printf("************************\n");
    }
    int Add(int x, int y)
    {
    	return x + y;
    }
    int Sub(int x, int y)
    {
    	return x - y;
    }
    int Mul(int x, int y)
    {
    	return x * y;
    }
    int Div(int x, int y)
    {
    	return x / y;
    }
    int Mor(int x, int y)
    {
    	return x % y;
    }
    typedef int(*Fun[])(int, int);
    int main()
    {
    	Fun pf = { 0, Add,Sub ,Mul,Div,Mor };
    	int input = 0;
    	do {
    		menu();
    		printf("请下指令:>");
    		scanf("%d", &input);
    		if (input <= 5 && input >= 0)
    		{
    			int m, n;
    			printf("请输入两个操作数:>");
    			scanf("%d%d", &m, &n);
    			int ret = pf[input](m, n);
    			printf("%d\n", ret);
    		}
    		else
    		{
    			(input == 0 ? printf("关闭计算机\n") : 1);
    			continue;
    		}
    	} while (input);
    
    	return 0;
    }
3.回调函数
  • 回调函数就是⼀个通过函数指针调⽤的函数。
    如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条件发⽣时由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应
4.qsort函数
5.回调函数小试牛刀---冒泡排序模拟qsort的功能

二、与指针有关联的知识点

1.sizeof与strlen
  • sizeof
  • 关键字
  • 计算变量的类型在内存中所占用字节的大小,也就是说它括号里面的式子不参与计算,仅仅判断一下最终结果的类型,然后计算该类型在内存中所占用字节的大小,后返回回来。
  • strlen
  • 库函数,使用的时候,需要包含<string.h>头文件
  • 计算字符串'\0'之前的元素个数,也就说,strlen的停止条件是遇到'\0';所以strlen只能计算字符串的长度。
2.数组名含义
  • 一维数组的数组名
  • 一般情况数组首元素的地址
  • 除了关键字sizeof后面的数组名,与&数组名
  • 二维数组的数组名
  • 一般情况数组首元素的地址
  • 除了关键字sizeof后面的数组名,与&数组名
  • 二维数组的元素是?
  • 二维数组是将每一组一维数组当作它的元素。
  • 所以数组的首元素的地址是第一行数组的地址,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值