呵呵,不知不觉就快半个月没好好学习了。害,任重道远啊。
#include<stdio.h>
//函数指针 - 是指向函数的指针
//int add(int x, int y)
//{
// int z = 0;
// z = x + y;
// return z;
//}
//int main()
//{
// int a = 20;
// int b = 10;
// int arr[10] = { 0 };
// //&函数名 和 函数名 是等价的;
// //printf("%p\n", &add);
// //printf("%p\n", add);
// int (*pa)(int, int) = add;
// printf("%d\n",(*pa)(a,b));
// return 0;
//}
//void prinf(const char* str)
//{
// printf("%s\n", str);
//}
//int main()
//{
// void (*p)(const char*) = prinf;
// (*p)("abcdef");
// return 0;
//}
//void prinf(char* str)
//{
// printf("%s\n", str);
//}
//int main()
//{
// void (*p)(char*) = prinf;
// char arr[] = "abcdef";
// (*p)(arr);
// return 0;
//}
//(*(void (*)())0)();//把0强制类型转换成void (*)()函数指针类型- 0就是一个函数的地址
//然后调用地址处的该函数。
//
// void(*signal(int, void(*)(int)))(int);
// signal是一个函数声明
// signal函数的参数有两个,第一个是int,第二个是函数指针,该函数指针指向的函数的参数是int,返回类型是void。
// signal函数的返回类型也是一个函数指针,该函数指针指向的函数的参数是int,返回类型是void。
//简化写法
//typedef void(*pufd)(int);
//pufd signal(int, pufd);
//int main()
//{
// int a = 10;
// int b = 20;
// int (*pa)(int, int) = add;
// printf("%d\n", pa(2, 3));//
// printf("%d\n", add(2, 3));//函数名就是地址;
// printf("%d\n", (*pa)(2, 3));//三者是等价的;
// 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;
//}
//
//int main()
//{
// int(*arr[4])(int, int) = { add,sub,mul,div };//函数指针数组
// int i = 0;
// for (i = 0; i < 4; i++)
// {
// printf("%d\n",arr[i](1, 1));
// }
// return 0;
//}
//char* my_strcpy(char* dest, const char* src);
写一个函数指针pf,能够指向my_strcpy
写一个函数指针数组,能够存放4个my_strcpy函数的地址;
//char* (*pf)(char*, const char*) = my_strcpy;
//char* (*arr[4])(char*, const char*) = { 0 };
void menu()
{
printf("************************\n");
printf("*** 1.add 2.sub ***\n");
printf("****3.mul 4.div ***\n");
printf("******* 0.exit ******\n");
printf("************************\n");
}
int add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
int z = x / y;
return z;
}
//int main()
//{
// printf("%d\n", sub(1, 1));
// return 0;
//}
//int main()
//{
// int input = 0;
// int x = 0;
// int y = 0;
// do
// {
// menu();
// printf("请选择:");
// scanf("%d", &input);
// switch (input)
// {
// case 1:
// printf("请输入两个操作数:");
// scanf("%d%d", &x, &y);
// printf("%d\n", add(x,y));
// break;
// case 2:
// printf("请输入两个操作数:");
// scanf("%d%d", &x, &y);
// printf("%d\n", sub(x,y));
// break;
// case 3:
// printf("请输入两个操作数:");
// scanf("%d%d", &x, &y);
// printf("%d\n", mul(x,y));
// break;
// case 4:
// printf("请输入两个操作数:");
// scanf("%d%d", &x, &y);
// printf("%d\n", div(x,y));
// break;
// case 0:
// printf("退出\n");
// break;
// default:
// printf("选择错误\n");
// break;
// }
// } while(input);
//}
int main()
{
int input = 0;
int x = 0;
int y = 0;
//pfarr 是一个函数指针数组 - 转移表
int (*pfarr[5])(int, int) = { 0,add,sub,mul,div };
do
{
menu();
printf("请选择:");
scanf("%d", &input);
if (input >= 1 && input <= 4)
{
printf("请输入两个操作数:");
scanf("%d%d", &x, &y);
int ret = pfarr[input](x, y);
printf("%d\n", ret);
}
else if (input = 0)
{
printf("退出\n");
}
else
{
printf("输入错误");
}
} while (input);
}