- 论坛徽章:
- 0
|
本帖最后由 liukunmeister 于 2011-03-06 13:18 编辑
为了简化问题,我想给楼主灌输一个模型。我先总结一下楼主面临的问题,楼主认为在int myftw(char 8pahtname, Myfunc *func) 中这个Myfunc *func应该是由一个Myfunc类型的地址传入的,可是书上的调用却是myftw(arv[1], myfunc);直接传入了一个Myfunc类型的变量而不是Myfunc类型的地址。
我的模型是这样的,函数的指针赋值是下面这个样子
int func(void);
int (*p)(void)=func;
就这么简单,需要注意的是第二行int (*p)(void)是一个指针,它和int *p是一样意思,只是这里长的很像函数是告诉你它是一个指向函数的指针。
接下来我们来看楼主遇到的问题
Myfunc myfunc;
myftw(arv[1], myfunc);
首先第一行Myfunc myfunc
因为Myfunc来自于typedef int Myfunc(const char*, const struct stat*, int)
所以其实Myfunc myfunc的意思就是 int myfunc(const char*, const struct stat*, int)
myfunc就变成了一个和Myfunc类型一样的指向函数的指针
然后第二行myftw(arv[1], myfunc);
到了关键的问题了,到底是myfunc传入还是&myfunc传入
myftw的定义是int myftw(char 8pahtname, Myfunc *func);
那么Myfunc *func 的意思其实就是 int (*func)(const char*, const struct stat*, int)
请楼主看看我的模型,再看看 int (*func)(const char*, const struct stat*, int)后面应该跟什么,是不是应该跟myfunc呢?
我不知道传入&myfunc是否正确,如果也正确的话可能是因为编译器做处理了吧,因为曾经c89的时候关于到底是p()还是(*p)()做过一场争论,最后编译器都支持了。
我认为楼主之所以会困惑主要是因为Myfunc *func这个东西和c语言中平常的指针申明不太一样,要按照指针函数申明的方式来理解。 |
|