求教C语言中关于函数指针的若干问题
飘过的小牛 2012-08-06 11:53:24 #include<iostream>
using namespace std;
int mm(int x, int y){
return x >= y ? x : y;
}
int main()
{
int a, b;
int (*p)(int, int) = mm; //疑问1
//int (*p)(int, int) = &mm; //这两个区别?
cout<<"mm = "<<mm<<endl;
cout<<"p = "<<p<<endl;
cout<<"*mm = "<<*mm<<endl;
cout<<"&mm = "<<&mm<<endl;
cout<<"*p = "<<*p<<endl;
cout<<"&p ="<<&p<<endl;
cout<<mm(3, 12)<<endl;
cout<<(*mm)(2, 223)<<endl;
cout<<(*p)(223, 15)<<endl;
cout<<p(433, 35)<<endl;
return 0;
}
这段程序能够正常运行。问题有以下几个:
1.为什么p=mm和p=&mm都是正确的?
2.mm是函数的入口地址,p也指向函数的入口地址。这两个地址肯定相同。但是*mm,&mm,*p为什么和函数的入口地址都相同,只有&p和上述几个不同。
3.四种方式调用函数为什么都是正确的?这是怎么规定的。
4.函数名和指针的关系
5.数组名和指针的关系
我觉得如果各位如果能把这点理解清楚,函数指针应该就算功夫到家了。我在私底下问了几个同学,都说不清楚。网上的资料也比较匮乏或者含糊其辞,这点困扰自己很久了,希望各位出手相助,帮我一把。谢谢!