C之typedef应用
1.0关于typedef关键字的基础:
https://www.cnblogs.com/anSn/p/8783347.html
1.1 typedef 修饰“函数类型” 的调用方法:
1)我们写一段普通的函数调用:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> int add(int a,int b); void main() { int d=0; d=add(1,2); printf("d=%d\n",d); } int add(int a,int b) { return a+b; }
运行结果如下:
2)我们引入typedef去修饰“函数函数类型”,并调用起来:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> typedef int fun(int,int); fun add;//等价 int add(int a,int b); void main() { int d=0; d=add(1,2); printf("d=%d\n",d); } int add(int a,int b) { return a+b; }
运行结果如下:
1.2 typedef修饰“函数指针类型”的调用方法:
1)首先,不引入typedef,写一段函数指针的定义,并指向一个函数调用起来:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> int add(int a,int b); int main() { int d=0; int (*p)(int,int);//定义一个函数指针。 p=add;//指针P指向一个函数地址 也可以p=&add; 结果一致的 d=p(1,2);//用指针调起函数 printf("d=%d\n",d); return 0; } int add(int a,int b) { return a+b; }
运行结果如下:
2)引入typedef修饰“函数类型”,并结合指针构成函数指针后去调用函数:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> typedef int fun(int,int);//给一个函数类型取一个别名,别名为fun int add(int a,int b); int main() { int d=0; fun *p;//int (*p)(int,int);//定义一个函数指针。 p=add;//指针P指向一个函数地址 d=p(1,2);//用指针调起函数 printf("d=%d\n",d); return 0; } int add(int a,int b) { return a+b; }
运行结果如下:
3)typedef直接修饰“函数指针类型”,指向一个函数并调用起来:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> typedef int (*fun)(int,int);//给一个“函数指针类型”取一个别名,别名为fun int add(int a,int b); int main() { int d=0; fun p;//int (*p)(int,int);//定义一个函数指针。 p=add;//指针P指向一个函数地址 也可以p=&add; 结果是一致的 d=p(1,2);//用指针调起函数 此为显示调用, 隐示调用为d=(*p)(1,2);两者结果是一致的。 printf("d=%d\n",d); return 0; } int add(int a,int b) { return a+b; }
4)拓展:
把一串代表函数入口地址的整形数 强转 成 “函数指针类型”,并送实参进行调用:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> int add(int a,int b); void main() { int d=0; printf("add函数的入口地址为:%p\n",add); //add 0x00401005 d=((int (*)(int,int))0x00401005)(1,9);//函数调用。等价d=add(1,9); //0x00401005 是一个整型地址,先把它强转成函数指针类型 :int (*)(int,int),再送参数进行调用 printf("d=%d\n",d); } int add(int a,int b) { printf("add被执行了"); return a+b; }
运行结果如下: