注册 登录
编程论坛 C++教室

有关函数名的问题!

九天冥盟 发布于 2015-08-05 16:17, 675 次点击
请问大师men:
    单独使用“函数名”是函数名代表什么?
    函数名代表函数的人口地址吗?
    如果是的话:那么 “函数名”和“&函数名”一样吗?
例如:int p(int i,int j)
{
return i+j;
}
int (*p1)(int i,int j)=p;和  int (*p2)(int i,int j)=&p;
一样吗?请解释一下?
5 回复
#2
rjsp2015-08-05 16:27
单独使用“函数名”是函数名代表什么?
------ 函数名 代表这个 函数,就像“小明”代表小明这个人。

函数名代表函数的人口地址吗?
------ 不,见上一个问题的回答

那么 “函数名”和“&函数名”一样吗?
------ 不一样,类型不一样呀

使你困惑的是,函数可隐式转化为函数指针类型。(这个和数组的行为一样,因为它们都无法赋值,所以才有此规定)
#3
九天冥盟2015-08-05 17:22
回复 2楼 rjsp
请问;
“函数可隐式转化为函数指针类型”是什么情况?
能用例子,或通俗的语言来说明一下吗?
#4
九天冥盟2015-08-05 17:51
回复 2楼 rjsp
函数可隐式转化成函数指针类型;
那么,函数指针类型是否可转化函数?
还有;
是用“函数名”好,还是用“&函数名”好呢?
#5
kenierlee2015-08-06 11:32
void f(void) {}
...
不管是 void (*p)(void) = f; 还是 void (*p)(void) = &f; 都是一样的,只不过后者的语法更像取地址,但实际上f本身就可以代表一个地址,楼主可以尝试打印f的值来看看。
但在C++里面一个函数如果用inline修饰,则编译器有可能会将该函数内联到代码中,所以也就不存在地址的说法了,但如果你之后以非调用的方式引用了该函数名,则编译器必须生成一个独立的函数,那它就和上面的f一样了。
#6
怪叔叔2015-08-07 13:23
1