#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);


 

}