当前位置: 首页> 文旅> 美景 > C语言进阶版第9课—指针(3)

C语言进阶版第9课—指针(3)

时间:2025/8/23 7:47:52来源:https://blog.csdn.net/weixin_70620792/article/details/142026343 浏览次数:0次

文章目录

  • 1. 字符指针变量
  • 2. 数组指针变量
  • 3. 二维数组传参的本质
  • 4. 函数指针变量
  • 5. typedef关键字
  • 6. 函数指针数组
  • 7. 函数指针数组的应用—转移表

1. 字符指针变量

在这里插入图片描述
在这里插入图片描述

  • 练习题
    在这里插入图片描述
    在这里插入图片描述

2. 数组指针变量

  • 在学习数组指针前,我们先回忆一下什么是指针数组
  • 指针数组 → 存放指针的数组 → char* arr[ ] = { ‘a’, ‘b’ ,‘c’};
  • 那么什么是数组指针变量呢?
  • 数组指针变量 → 存放数组地址,指向数组的指针变量
  • 我们来看一段代码
#include <stdio.h>
int main()
{int* p1[10];     //p1是什么int(*p2)[10];    //p2是什么return 0;
}
  • 指针数组
  • int*  p1   [10];
      |     |    |
      |     |  数组元素个数
      |   数组名
    表示数组每个元素都是int*类型
  • 数组指针变量
  • int  (*p2)   [10];
      |     |    |
      |     |  p2指向数组的元素个数
      |   p2是数组指针变量
    p2指向的数组的元素类型

在这里插入图片描述

3. 二维数组传参的本质

  • 前面我们学过二维数组
  • int  arr  [5]   [10];
      |     |    |   |
      |     |    | 数组每个元素的内容
      |     | 数组元素个数
      |  数组名
    表示数组每个元素都是int类型
  • 二维数组传参
    在这里插入图片描述
    在这里插入图片描述
    二维数组传参,形参可用数组,也可用指针

4. 函数指针变量

  • 函数地址
    在这里插入图片描述
  • 函数指针变量 —→ 存放函数地址
  • int  (*p1)   (int x,int y);
       |     |     ------------
       |     |       |
       |     |     p1所指函数的参数类型和个数
       |   函数指针变量
    p1指向函数的返回类型在这里插入图片描述
  • 练习
    在这里插入图片描述
    在这里插入图片描述

5. typedef关键字

  • typedef是用来类型重定义的
    在这里插入图片描述

6. 函数指针数组

  • 存放函数指针(相同类型)的数组
    在这里插入图片描述

7. 函数指针数组的应用—转移表

转移表
优化前
#include <stdio.h>
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 main()
{int x, y;int input = 1;int ret = 0;do{printf("-----------------------\n");printf("-----1.add    2.sub----\n");printf("-----3.mul    4.div----\n");printf("-------- 0.exit -------\n");printf("请选择:");scanf("%d", &input);switch (input){case 1:printf("输入操作数:");scanf("%d %d", &x, &y);ret = add(x, y);printf("ret=%d\n", ret);break;case 2:printf("输入操作数:");scanf("%d %d", &x, &y);ret = sub(x, y);printf("ret=%d\n", ret);break;case 3:printf("输入操作数:");scanf("%d %d", &x, &y);ret = mul(x, y);printf("ret=%d\n", ret);break;case 4:printf("输入操作数:");scanf("%d %d", &x, &y);ret = div(x, y);printf("ret=%d\n", ret);break;case 0:printf("退出\n");break;default:printf("输入错误");break;}} while (input);return 0;
}
  • 优化
    在这里插入图片描述
//优化后
#include <stdio.h>
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 main()
{int x, y;int input = 1;int ret = 0;int(*ptr[5])(int, int) = { 0,add,sub,mul,div };do{printf("-----------------------\n");printf("-----1.add    2.sub----\n");printf("-----3.mul    4.div----\n");printf("-------- 0.exit -------\n");printf("请选择:");scanf("%d", &input);if (input <= 4 && input >= 1){printf("输入操作数:");scanf("%d %d", &x, &y);ret = (*ptr[input])(x, y);printf("ret=%d\n", ret);}else if (input == 0)printf("退出\n");elseprintf("输入错误\n");} while (input);return 0;
}
关键字:C语言进阶版第9课—指针(3)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: