C语言 谁能解释下这句话typedef int(*lpAdd)(int,int);
来源:百度知道 编辑:UC知道 时间:2024/05/28 00:31:24
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这种形式。。所有做一下转换其实可以不转 只是编译器会报警的