#include
int main()
{
(*(void(*)())0)();
/*
调用0地址处的函数
该函数无参,返回类型为void
1.void(*)() -函数指针类型
2.(void(*)())0 -对0进行强制类型转换,被解释为一个函数地址
3.*(void(*)())0 -对0地址进行了解引用操作
4.(*(void(*)())0)() -调用0地址处的函数
*/
return 0;
}
void(*signal(int, void(*)(int)))(int);
/*
1.signal和()先结合,说明signal是函数名
2.signal 函数的第一个参数类型是int ,第二个参数类型是函数指针
该函数指针,指向一个参数是int,返回类型为void的函数
3.signal函数返回类型也是一个函数指针
该函数指针,指向一个参数是int,返回类型为void的函数
signal是一个函数的声明
*/
//函数指针数组 -存放函数指针的数组
//整形指针
//整形指针数组
int add(int x,int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int main()
{
int (*padd)(int, int) = &add;
int (*psub)(int, int) = ⊂
int (*parr[2])(int, int) = { add, sub };//parr就是函数指针数组
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("****** 3.mul 4.div ********/n");
printf("******* 0.exit ************/n");
printf("******************************/n");
}
int main()
{
int x, y, ret;
int input = 0;
do
{
menu();
printf("请选择:/n");
scanf("%d", &input);
switch (input)
{
case 1:
printf("请输入两个数:");
scanf("%d%d", &x, &y);
ret = add(x, y);
break;
case 2:
printf("请输入两个数:");
scanf("%d%d", &x, &y);
ret = sub(x, y);
break;
case 3:
printf("请输入两个数:");
scanf("%d%d", &x, &y);
ret = mul(x, y);
break;
case 4:
printf("请输入两个数:");
scanf("%d%d", &x, &y);
ret = div(x, y);
break;
case 0:
printf("退出程序/n");
break;
default:
printf("请重新输入/n");
break;
}
printf("%d/n", ret);
} while (input);
}
int main()
{
int input = 0;
int x, y, ret;
do
{
menu();
printf("请选择:/n");
scanf("%d", &input);
//p是函数指针数组
//转移表-《C和指针》
int(*p[5])(int, int) = { NULL, add, sub, mul, div };
if (input >= 1 && input <= 4)
{
printf("请输入两个数/n");
scanf("%d%d", &x, &y);
ret = (p[input])(x, y);
printf("%d/n", ret);
}
else if (input == 0)
{
printf("退出程序/n");
break;
}
else
{
printf("输入错误/n");
}
} while (input);
}