C语言 谁能解释下这句话typedef int(*lpAdd)(int,int);

来源:百度知道 编辑:UC知道 时间:2024/05/28 00:31:24
其实有如下程序,我希望前辈能帮我拆成不用typedef的格式
typedef int(*lpAdd)(int,int) ;
lpAdd add ;
add = (lpAdd)GetProcAddress(......) ;
我多块崩了,实在不会,请高手前辈指点

可以写成:
int*(int,int) add=int*(int,int)GetProcAddress(.....)

int*是函数返回类型
(int,int)是形参列表

..typedef这个我就没办法给你讲
不过单
int(*lpAdd)(int,int)
我还是可以给你讲讲的。
先来注意区别

首先*比()优先集低。
int *lpAdd(int,int)
估计,你应该明白这个是什么意思了。
对的这个函数的功能就是返回一个整形的指针。
对的。因为括号优先集高
所以先表示的是lpAdd(int,int),这个 函数所返回值。前面加一个*,就是比如这个值是指向。就好比:
*p,p是指针。。*,表示他是一个指针的说明符而已

好。我们现在回头来看一下int(*lpAdd)(int,int)

所以先表示的是(*lpAdd),然后才是(int,int)
深想一下,意思就是这个指针(IlpAdd)
指向的是这个函数,
也就是指针函数了。
表示的是这个指针指向的是这个函数的功能。

typedef 就是用来简化复杂的类型的。。。。
你还要拆成不用typedef的形式。。。。

用typedef很好理解的
lpAdd是一个 函数指针类型
他指向这样的函数原型 int func(int a, int b);
只要你记住这一点就行了

那么下面add = (lpAdd)GetProcAddress(...);
的意思其实就是让add指向GetProcAddress(...);这个函数
以后直接用add(a,b)就相当于使用GetProcAddress(a,b)了

(lpAdd)GetProcAddress(...) 里面的那个lpAdd是强制类型转换
因为GetProcAddress()这个函数的类型可能不是lpAdd这种形式。。所有做一下转换其实可以不转 只是编译器会报警的