hi,小魏又来了,哈哈哈,没想到吧
今天的主要内容是讲解一下一维数组传参,二维数组传参,数组指针和函数指针
1 一维数组传参
2二维数组传参
3函数指针
4 转移表的实现与优化
我们先上一段代码
注意了,主函数中是数组,那在形参中写成一样的形式也可以
形参接收的的是一维数组的首地址,所以形参里写成指针的形式用来接收一维数组的地址
二维数组的传参
同理,主函数中是二维数组,形参中就用二维数组来接收
二维数组在传参时,传的也是首元素的地址,但是非常特殊的是二维数组的首地址是第一行数组元素,所以我们拿数组指针接收它,数组有5个元素,对p+1就得到第二行的元素的首地址,对于一个数组来说知道其首元素的地址,就可以遍历所有元素
我们要记住
二维数组存储,行可以省略,列不可以省略。在形参中也一样。
3.函数指针
4.转移表
二话不说,上代 码
//优化以后 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 menu() { printf("**************************\n"); printf("*******1.add 2.sub******\n"); printf("*******1.mul 2.div******\n"); printf("******* 0.exit ******\n"); printf("**************************\n"); } //转移表 int (*pfArr[])(int, int) = { 0, Add, Sub, Mul, Div }; int main() { int input = 0; int x = 0; int y = 0; int ret = 0; do { menu(); printf("请选择:>"); scanf("%d", &input); if (input == 0) { printf("退出计算器\n"); } else if (input >= 1 && input <= 4) { printf("请输入2个操作数:>"); scanf("%d%d", &x, &y); ret = pfArr[input](x, y); printf("ret = %d\n", ret); } else { printf("选择错误\n"); } } while (input); return 0; }
未优化
//函数指针 int Add(int a, int b) { int c = a + b; return c; } int main() { int arr[10]; int(*p)[10] = &arr;//p是一个数组指针变量 printf("%p\n", &Add); printf("%p\n,Add"); int (*pf)(int, int) = Add;//这个就是函数指针变量 int ret = (*pf)(2, 3); int ret = pf(2, 3); printf("%d\n", ret); return 0; } //这是实现转移表需要的函数 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 menu() { printf("**************************\n"); printf("*******1.add 2.sub******\n"); printf("*******1.mul 2.div******\n"); printf("******* 0.exit ******\n"); printf("**************************\n"); } int main() { int input = 0; int x = 0; int y = 0; int ret = 0; do { menu(); printf("请选择:>"); scanf("%d", &input); ret = Add(x, y); 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; }
优化以后的代码就是采用了函数指针数组,
今天下魏就更新到这里,咱们下期子再见,886!