今天学了指针的运用
1 指针数组 *a[3]
2 一维数组 a[3] *p=a;
3 二维数组a[3][4] (*p)3
4 函数指针 double(*p[4])(double num1, double num2) = { f1, f2, f3, f4 };(四个函数)printf(“\n%g %c %g = %g”, a, op, b, p[2](a, b));(调用的方式)
//简易计算器
//加
double f1(double num1, double num2)
{
return num1 + num2;
}
//减
double f2(double num1, double num2)
{
return num1 - num2;
}
//乘
double f3(double num1, double num2)
{
return num1 * num2;
}
//除
double f4(double num1, double num2)
{
return num1 / num2;
}
void main()
{
double a, b;
char op;
double(*p[4])(double num1, double num2) = { f1, f2, f3, f4 };
while (1)
{
printf("\n请输入算术表达式,如: 3 + 5,如果想结束计算请按0f0\n");
scanf("%lf %c %lf", &a, &op, &b);
getchar();
if (a == 0 && op == 'f' && b == 0)
{
break;
}
switch (op)
{
case '+':
printf("\n%g %c %g = %g", a, op, b, p[0](a, b));
break;
case '-':
printf("\n%g %c %g = %g", a, op, b, p[1](a, b));
break;
case '*':
printf("\n%g %c %g = %g", a, op, b, p[2](a, b));
break;
case '/':
printf("\n%g %c %g = %g", a, op, b, p[3](a, b));
break;
default:
printf("\n输入有误!!");
}
}
printf("\n谢谢使用!");
getchar();
}
写这题时想到了函数的调用,不过没想到函数指针可以行数组一样直接调用取值,对于原理是清楚的不过在书写的时候还是有点小问题,运行出来的东西不是我想要的,感觉有点飘了;
函数指针: 指向函数的指针变量;
int (*p)(int n1,float n2);
1,复制函数头;
2,将函数名换成(*指针名);
指针数组: 元素都是指针的数组;
定义格式: int a = 3; int a[10]; int *a[10];
int p; //整形变量
int *p; //指向整形变量的指针变量(指针)
int p[]; //整形数组
int *p[5]; //指向整形变量的指针的数组(指针数组)
int (*p)[5]; //指向每一行有5列的数组的指针(数组指针)可以跨行 二级指针
int p(){}; //返回值为整形的函数
int (*p)(); //指向上面↑这种类型函数的指针(函数指针)
int (*p[4])(); //存放↑这种类型指针的数组(函数指针数组)
int (*)[5] p(){}; //返回71行类型的指针数组的函数(数组指针函数)
int* p(){}; //返回值为指针类型的函数(指针函数)
int* (*p)(); //指向76行这种类型的函数的指针(指针函数指针)
int* (*p[5])(); //装有5个77行这种类型的指针的数组(指针函数指针数组)
1万+

被折叠的 条评论
为什么被折叠?



