求高手,一个有趣函数指针有关问题?调试了好久没解决
求高手,一个有趣函数指针问题??????调试了好久没解决?
#ifndef TEST_C_
#define TEST_C_
#include <stdio.h>
void hello_num(int num)
{
int i;
for (i=0;i<num;i++)
{
printf("hello world,number is %d\n",i);
}
}
void hello(void)
{
printf("hello world,no number\n");
}
void main()
{
void (*p)(int)=hello_num;
void (*q)()=hello;
int a=5;
(*p)(a);
(*q)(a);
}
#endif
在VC6.0编译和运行都正常,接着我不小心试了改了一下
将主函数里void (*p)(int)=hello_num和 void (*q)()=hello;次序换了结果会编译错误,横奇怪,我开始调试,一开始我认为是c语言声明不能 只能在主函数开头,即定义后不能再也不能声明,接着又写了一个简单的程序验证了程序中间可以再声明,一开始的想法错误,不知道怎么回事,求高手解答,调试了好久没头绪?????
void main()
{
void (*p)(int)=hello_num;
int a=5;
(*p)(a);
void (*q)()=hello;//换了位置
(*q)(a);
}
------解决方案--------------------
c的定义一定要出现在最前面,你代码文件的后缀是不是改成了.cpp?
------解决方案--------------------
#ifndef TEST_C_
#define TEST_C_
#include <stdio.h>
void hello_num(int num)
{
int i;
for (i=0;i<num;i++)
{
printf("hello world,number is %d\n",i);
}
}
void hello(void)
{
printf("hello world,no number\n");
}
void main()
{
void (*p)(int)=hello_num;
void (*q)()=hello;
int a=5;
(*p)(a);
(*q)(a);
}
#endif
在VC6.0编译和运行都正常,接着我不小心试了改了一下
将主函数里void (*p)(int)=hello_num和 void (*q)()=hello;次序换了结果会编译错误,横奇怪,我开始调试,一开始我认为是c语言声明不能 只能在主函数开头,即定义后不能再也不能声明,接着又写了一个简单的程序验证了程序中间可以再声明,一开始的想法错误,不知道怎么回事,求高手解答,调试了好久没头绪?????
void main()
{
void (*p)(int)=hello_num;
int a=5;
(*p)(a);
void (*q)()=hello;//换了位置
(*q)(a);
}
------解决方案--------------------
c的定义一定要出现在最前面,你代码文件的后缀是不是改成了.cpp?
------解决方案--------------------
- C/C++ code
void main() { void (*p)(int)=hello_num; int a=5; (*p)(a); void (*q)()=hello;//换了位置 (*q)(a); }
------解决方案--------------------
关于函数指针的几种用法,请参考:
http://blog.****.net/pathuang68/article/details/4817046