今天搞了一天的仓储管理,身心憔悴啊。
晚上师弟过来问linux c编程关于typedef的用法,typedef怎么说呢,仔细想觉得水很深,但是常见的typedef
也就几种类型,现在总结下。为了更好的体验,我用vc6.0
写了一个程序,如下:
#include <stdio.h>
typedef int (*func)(int ,int); //变量类型 func,为函数指针类型
typedef int (another)(int,int); //变量类型? another,函数名变量?,比较疑惑
/*int another(int,int);
刚开始搞不懂第二个和函数指针的区别,最后发现把typedef去掉,不就是个类似函数声明的东西嘛。。。
从我现在的阅历来看,找不到`typedef int (another)(int,int);`的用处,因为你后期调用的时候还
不得`another * param`嘛,这不就是函数指针嘛。。
*/
int sum(int a,int b)
{
return a+b;
}
int main()
{
int result;
func p;
another *test; //其实就是func test.
// another test ;
//不能通过编译,那定义了有毛线作用啊,就为了引用指针为毛不直接 func test呢。
//所以上文我才说这种typedef是毫无意义的,希望有大牛看到这里打脸。
result=sum(1,2);
printf ("sum=%d\n",result);
p =(func)sum;
result=p(1,2);
printf ("sum=%d\n",result);
p =(func)sum;
result=(*p)(1,2);
printf ("sum=%d\n",result);
p =(func)∑
result=p(1,2);
printf ("sum=%d\n",result);
p =∑
result=p(1,2);
printf ("sum=%d\n",result);
p =sum;
result=p(1,2);
printf ("sum=%d\n",result);
*test =sum;
result=test(1,2);
printf ("sum=%d\n",result);
return 0;
}
output: sum=3 (repeate-7times)
首先来复习一下基础知识
1. 函数指针
int max(int a,int b){
return max_number of a or b} //伪代码
int(*p)(int,int); //声明一个函数指针
p =max
usage: p(1,2) (*p)(1,2)
结合反汇编来看一下吧:
1: #include <stdio.h>
2: typedef int (*func)(int ,int);
3: typedef int (another)(int,int);
4: //int another(int,int);
5:
6: int sum(int a,int b)
7: {
00401020 push ebp
00401021 mov ebp,esp
00401023 sub esp,40h //default stack space,no local parameter exist.
00401026 push ebx
00401027 push esi