函数名本身就是一个指针的说法是否正确?该怎么解决

函数名本身就是一个指针的说法是否正确?
函数名本身就是一个指针的说法是否正确?

在定义函数的时候,相当于定义了一个指向函数内容的指针,这么理解正确吗?

void name(void){...}; //只是使用name()来使用其中的代码块,name()指向其中的内容。
-----------------------------------------------------
int a;
void length(int){...}; //使用length(a)来使用其中的代码块,只是为这种指针的内容限定了访问条件。
-----------------------------------------------------
至于函数的返回值,只是该代码块执行完毕后返回的数值,并不与函数名就是指针的说法相冲突。

既然:
int **p;//是指向int类型的指针的指针。
那么:
是不是可以说name()就是一个指向name()函数的指针呢?

------解决方案--------------------
函数名是一个地址。而函数指针是指向这个地址的一个变量。
不过从某种意义上来讲,搂主的理解也是可以的。
------解决方案--------------------
是的
函数名指向一个地址
正如dll调用一样,也是寻找这个接口的地址
------解决方案--------------------
可以这样理解
通常在编程中 使用函数名 和函数指针是一样的
使用函数名 编译器编译时会自动转换成函数指针
------解决方案--------------------
函数名不是函数指针,一般编译器调用函数名来调用函数,从这个概念上说函数名现当于函数地址
------解决方案--------------------
函数名是一个地址值
编译器编译的时候会把它当做一个地址来解析
因此如果你有一个同样类型的函数指针变量, 就可以将函数名作为值赋给这个指针变量
------解决方案--------------------
函数名就是函数名,在恰当的时候能转换为指向这个函数的指针,其值为函数的地址.
------解决方案--------------------
函数名就是指向这个函数的指针。
C/C++ code

#include <iostream>
using namespace std;

void print(char* ch)
{
    cout<<ch<<endl;
}

int main()
{
    void (*fn1)(char*) = print;
    void (*fn2)(char*) = &print;
    fn1("a");
    fn2("b");
    return 0;
}

------解决方案--------------------
functionname == address
就像是为这个function start address取了一个好记的名字.
------解决方案--------------------
函数名只是一段代码的一个入口地址而已。和汇编里的
call addr
一样,用哪个指都一样,只要跳到地方就对了
------解决方案--------------------
函数名和数组名实际上都不是指针,但是,在使用时可以退化成指针,即编译器可以帮助我们实现自动的转换。

例如:
void func();

func和&func是一样的。明确的写法是&func;