c语言中函数指针的问题,求高手指点!
我的代码如下:******************************#include<stdio.h>intf(inta){printf("貌%d似!\n",a);...
我的代码如下:
******************************
#include <stdio.h>
int
f(int a)
{
printf("貌%d似!\n",a);
return 0;
}
void
main()
{
int (*p1)(int);
int (*p2)(int);
int (*p3)(int);
p1 = &f;
p1(11);
(*p1)(12);
p2 = f;
p2(21);
(*p2)(22);
p3 = *f;
p3(31);
(*p3)(32);
(*(*p3))(33);
printf("%p,%p,%p\n",p1,p2,p3);
}
****************************
问题是,上面的代码能通过编译,连警告都没有.可我完全解释不通啊....
我的编译器是VS2010. 展开
******************************
#include <stdio.h>
int
f(int a)
{
printf("貌%d似!\n",a);
return 0;
}
void
main()
{
int (*p1)(int);
int (*p2)(int);
int (*p3)(int);
p1 = &f;
p1(11);
(*p1)(12);
p2 = f;
p2(21);
(*p2)(22);
p3 = *f;
p3(31);
(*p3)(32);
(*(*p3))(33);
printf("%p,%p,%p\n",p1,p2,p3);
}
****************************
问题是,上面的代码能通过编译,连警告都没有.可我完全解释不通啊....
我的编译器是VS2010. 展开
3个回答
展开全部
函数名就是函数的入口地址,从运行的结果来看,
p1 = &f;
p2 = f;
p3 = *f;
应该是等价的,而且
p3(31);
(*p3)(32);
(*(*p3))(33);
这三种调用也是等价的,相当于f(31);
p1 = &f;
p2 = f;
p3 = *f;
应该是等价的,而且
p3(31);
(*p3)(32);
(*(*p3))(33);
这三种调用也是等价的,相当于f(31);
追问
这就是我不懂的地方了,c语言应该很严谨啊,怎么会有这种情况出现呢?还是有什么其它原因,又或者是与编译器有关.你推荐哪种写法?
追答
貌似效果都一样,跟编译器应该是没有关系的。我觉得还是按照自己容易理解来写吧,方便自己也方便别人理解,但是都了解一下总是好的,至少看别人的程序时不会不懂了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询