1 Star 0 Fork 0

vasc语言/练习编程

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
zhizhen(5).c 7.45 KB
一键复制 编辑 原始数据 按行查看 历史
vasc语言 提交于 2024-03-18 13:51 . C语言.指针(2)
#define _CRT_SECURE_NO_WARNINGS
//函数指针 - 指向函数的指针
//函数指针变量 - 存放函数地址的指针
//#include<stdio.h>
//
//int Add(int x, int y)
//{
// return x + y;
//}
//
//int main()
//{
// //printf("%p\n", Add); //00007FF674FA1348
// //
// //printf("%p\n", &Add);//00007FF674FA1348
// int (*pf)(int, int) = Add;//pf就是函数指针变量
// int ret1 = (*pf)(3, 4);
// int ret2 = Add(3, 5);
//
// printf("ret = %d\n", ret1);
// printf("ret = %d\n", ret2);
//
// return 0;
//}
//什么叫函数指针变量?
//类比:
//整数数组:存放整型的数组
//字符数组:是存放字符的数组
//指针数组:是存放指针的数组
//char* arr1[5];//字符指针数组
//int* arr2[5];//整型指针数组
//
//如果要把多个相同类型的函数指针存放在一个数组中,
//这个数组就是:函数指针数组
//#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 (*pf1)(int, int) = Add;
// int (*pf2)(int, int) = Sub;
// int (*pf3)(int, int) = Mul;
// int (*pf4)(int, int) = Div;
// //
// int a, b = 0;
// scanf("%d%d", &a, &b);
// //
// int (*pfArr[4])(int, int) = { Add, Sub, Mul, Div };//用一个函数指针数组来存放多个函数
// int i = 0;
// //
// for (i = 0; i < 4; i++)
// {
// int ret = (pfArr)[i](a,b);
//
// printf("%d ", ret);
// }
//
// return 0;
//}
//想写一个计算机器:
//完成两个整数的运算
//1.加法 2.减法 3.乘法 4.除法
//#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;
//}
////
//void meun()
//{
// printf("*************************\n");
// printf("*****1.Add 2.Sub*****\n");
// printf("*****3.Mul 4.Div*****\n");
// printf("*****0.Exit *****\n");
// printf("*************************\n");
//}
////
//int main()
//{
// int input = 0;
// int x = 0;
// int y = 0;
// int ret = 0;
// //
// do
// {
// meun();
// 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("选择错误,请重新选择:\n");
// break;
// }
// } while (input);
//
// return;
//}
//前面的程序十分的冗余
//
////想写一个计算机器:
////完成2个整数的运行
////1. 加法
////2. 减法
////3. 乘法
////4. 除法
//#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;
//}
////
//void meun()
//{
// printf("*************************\n");
// printf("*****1.Add 2.Sub*****\n");
// printf("*****3.Mul 4.Div*****\n");
// printf("*****0.Exit *****\n");
// printf("*************************\n");
//}
////
//int main()
//{
// int input = 0;
// int x = 0;
// int y = 0;
// int ret = 0;
// //
// //创建一个函数指针数组来存放多个函数
// //转移表
// int (*pfArr[5])(int, int) = { NULL,Add,Sub,Mul,Div };
// 0 1 2 3 4
// do
// {
// meun();
// printf("请选择:>");
// scanf("%d", &input);
// //
// if ((input >= 1) && (input <= 4))
// {
// printf("请输入两个整数:>");
// scanf("%d%d", &x, &y);
// //
// ret = pfArr[input](x, y);
// //
// printf("ret = %d\n", ret);
// }
// //
// else if (input == 0)
// {
// printf("退出计算机\n");
// break;
// }
// //
// else
// {
// printf("选择错误,请重新选择:\n");
// }
// //
// } while (input);
//
// return;
//}
//#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;
//}
////
//void meun()
//{
// printf("*************************\n");
// printf("*****1.Add 2.Sub*****\n");
// printf("*****3.Mul 4.Div*****\n");
// printf("*****0.Exit *****\n");
// printf("*************************\n");
//}
//
//int main()
//{
// int input = 0;
// int ret = 0;
// int x, y = 0;
// //创建一个函数指针数组存放函数
// int (*pfArr[5])(int, int) = { NULL,Add,Sub,Mul,Div };
//
// do
// {
// meun();
// //
// printf("请选择:");
// scanf("%d", &input);
// //
// if ((input >= 1) && (input <= 4))
// {
// printf("请输入两个整数:>");
// scanf("%d%d", &x, &y);
// //
// ret = pfArr[input](x, y);
// //
// printf("ret = %d\n", ret);
// }
// //
// else if (input == 0)
// {
// printf("退出计算机\n");
// break;
// }
// //
// else
// {
// printf("选择错误,请重新选择:\n");
// }
// } while (input);
//
// return 0;
//}
//想写一个计算机器:
//完成2个整数的运行
//1. 加法 2. 减法 3. 乘法 4. 除法
//回调函数
//
//#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;
//}
////
//void meun()
//{
// printf("*************************\n");
// printf("*****1.Add 2.Sub*****\n");
// printf("*****3.Mul 4.Div*****\n");
// printf("*****0.Exit *****\n");
// printf("*************************\n");
//}
////
//void Calc(int (*pfArr)(int, int))
//{
// int ret = 0;
// int x, y = 0;
// //输入
// printf("请输入两个整数:>");
// scanf("%d %d", &x, &y);
// //
// ret = pfArr(x, y);
// //输出
// printf("ret = %d\n", ret);
//}
////
//int main()
//{
// int input = 0;
// //
// do
// {
// meun();
// //选择分支:加法, 减法, 乘法, 除法 其中一个
// printf("请选择:>");
// scanf("%d", &input);
// //
// switch (input)
// {
// default:
// printf("选择错误,请重新选择:\n");
// break;
// case 1:
// Calc(Add);
// break;
// case 2:
// Calc(Sub);
// break;
// case 3:
// Calc(Mul);
// break;
// case 4:
// Calc(Div);
// break;
// case 0:
// printf("退出计算机\n");
// break;
// }
// } while (input);
//
// return 0;
//}
//总结:
//一级指针:char* p = &ch; int* p = &p;
//二级指针:char** pp = &p; //存放的是一级指针的地址
//
//数组指针:int arr[4] --> int (*p)[4] --> 指向的是数组
// int (*p)[4] = &arr;
//
//函数指针:指向的是函数
// char* test(int n, char* s){}
// char (*pf)(int, int) = test// pf 是函数指针变量
//
//指针数组:存放的是指针
//char* arr1[4]; int* arr2[4]; double* arr3[4]; float* arr4[4];
//
//函数 指针数组:存放的是 函数的地址,以数组的形式来存放
//char* (*pfArr[4])(int, char*);
//拓展:指向函数指针数组的指针
//char* (* (*p)[4])(int, char*) = &pfArr;
//取出的是函数指针数组的地址 --> p就是指向一个函数指针数组的指针
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/vasc-language/practice-programming.git
git@gitee.com:vasc-language/practice-programming.git
vasc-language
practice-programming
练习编程
master

搜索帮助