函数名的本质是什么?

qq_335498556 2014-03-23 05:47:22
加精
看下面的图片:

这段话什么意思?难道像【printf】这样的函数名,其本质是一个数值吗?
...全文
5275 80 打赏 收藏 转发到动态 举报
写回复
用AI写文章
80 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tamce 2014-07-13
  • 打赏
  • 举报
回复
是函数指针...错了...
引用 84 楼 Tamce 的回复:
函数名就是地址,甚至可以定义一个函数地址数组来储存一组函数,然后分别调用,或者是用一个返回“函数指针“类型的表达式来调用函数。 以下代码演示了从表达式调用函数的方法(函数指针)

#include <iostream>

using namespace std;

//为了方便代码阅读自定义函数指针类型
//定义了一个函数指针类型:f_ptr只能指向带一个int类型参数且没有返回值的函数
typedef void (*f_ptr)(int);
//因为*的优先级关系,所以要用括号,否则就定义了一个返回指针类型的普通函数了

void foo1(int a)
{
    cout << "foo1:" << a << endl;
}

void foo2(int a)
{
    cout << "foo2:" << a << endl;
}

f_ptr fun()
{
    return &foo2;
}

int main()
{
    f_ptr arr[2] = {&foo1, &foo2};
    for(int i = 0; i < 2; ++i)
        arr[i](i);
    fun()(5);
    return 0;
}
Tamce 2014-07-13
  • 打赏
  • 举报
回复
引用 84 楼 Tamce 的回复:
函数名就是地址,甚至可以定义一个函数地址数组来储存一组函数,然后分别调用,或者是用一个返回“函数指针“类型的表达式来调用函数。 以下代码演示了从表达式调用函数的方法(函数指针)

#include <iostream>

using namespace std;

//为了方便代码阅读自定义函数指针类型
//定义了一个函数指针类型:f_ptr只能指向带一个int类型参数且没有返回值的函数
typedef void (*f_ptr)(int);
//因为*的优先级关系,所以要用括号,否则就定义了一个返回指针类型的普通函数了

void foo1(int a)
{
    cout << "foo1:" << a << endl;
}

void foo2(int a)
{
    cout << "foo2:" << a << endl;
}

f_ptr fun()
{
    return &foo2;
}

int main()
{
    f_ptr arr[2] = {&foo1, &foo2};
    for(int i = 0; i < 2; ++i)
        arr[i](i);
    fun()(5);
    return 0;
}
引用 84 楼 Tamce 的回复:
函数名就是地址,甚至可以定义一个函数地址数组来储存一组函数,然后分别调用,或者是用一个返回“函数指针“类型的表达式来调用函数。 以下代码演示了从表达式调用函数的方法(函数指针)

#include <iostream>

using namespace std;

//为了方便代码阅读自定义函数指针类型
//定义了一个函数指针类型:f_ptr只能指向带一个int类型参数且没有返回值的函数
typedef void (*f_ptr)(int);
//因为*的优先级关系,所以要用括号,否则就定义了一个返回指针类型的普通函数了

void foo1(int a)
{
    cout << "foo1:" << a << endl;
}

void foo2(int a)
{
    cout << "foo2:" << a << endl;
}

f_ptr fun()
{
    return &foo2;
}

int main()
{
    f_ptr arr[2] = {&foo1, &foo2};
    for(int i = 0; i < 2; ++i)
        arr[i](i);
    fun()(5);
    return 0;
}
输出的结果为: foo1:0 foo2:1 foo2:5
Tamce 2014-07-13
  • 打赏
  • 举报
回复
函数名就是地址,甚至可以定义一个函数地址数组来储存一组函数,然后分别调用,或者是用一个返回“函数指针“类型的表达式来调用函数。 以下代码演示了从表达式调用函数的方法(函数指针)

#include <iostream>

using namespace std;

//为了方便代码阅读自定义函数指针类型
//定义了一个函数指针类型:f_ptr只能指向带一个int类型参数且没有返回值的函数
typedef void (*f_ptr)(int);
//因为*的优先级关系,所以要用括号,否则就定义了一个返回指针类型的普通函数了

void foo1(int a)
{
    cout << "foo1:" << a << endl;
}

void foo2(int a)
{
    cout << "foo2:" << a << endl;
}

f_ptr fun()
{
    return &foo2;
}

int main()
{
    f_ptr arr[2] = {&foo1, &foo2};
    for(int i = 0; i < 2; ++i)
        arr[i](i);
    fun()(5);
    return 0;
}
鸥翔鱼游1 2014-04-28
  • 打赏
  • 举报
回复
看了此贴菜鸟又涨姿势了
rfc2000 2014-04-21
  • 打赏
  • 举报
回复
本质来讲,是一个地址
rfc2000 2014-04-21
  • 打赏
  • 举报
回复
函数名,反汇编后,其实看看汇编代码就知道了,其类似一个标号,例如: int funca() 返回编后: funca: mov ax,[esp+4]
qqpizi_6 2014-04-03
  • 打赏
  • 举报
回复
来学习的。。。
beyondcj 2014-04-01
  • 打赏
  • 举报
回复
bwangel 2014-03-31
  • 打赏
  • 举报
回复
本质是CALL指令后面的二进制地址
你别自恋了 2014-03-31
  • 打赏
  • 举报
回复
涨姿势了
xusir98 2014-03-30
  • 打赏
  • 举报
回复
臨風輕嘆 2014-03-30
  • 打赏
  • 举报
回复
学过编译原理和汇编的话,应该很清楚
卖水果的net 2014-03-29
  • 打赏
  • 举报
回复
函数就一个人,他有某种技能,你调他的时候,就是跟他说“张三,你去把什么什么活干了”,张三就一个函数,或者他就是函数的名字。
qq_335498556 2014-03-28
  • 打赏
  • 举报
回复
引用 28 楼 xiaohuh421 的回复:
[quote=引用 11 楼 supermegaboy 的回复:] 从1楼到10楼的回答都只有一个相同的本质,就是都认为牙膏就是宇宙飞船!
本末倒置.... 本质是要往共性上说, 而不是特例. 而共性就像面像对象中的基类. 显然牙膏和宇宙飞船不存在这样的关系.[/quote] 没看懂,搞哲学的?
qq_335498556 2014-03-28
  • 打赏
  • 举报
回复
引用 70 楼 mujiok2003 的回复:
看不懂英语,准备结贴了。
mujiok2003 2014-03-28
  • 打赏
  • 举报
回复
pigpigappleapple 2014-03-28
  • 打赏
  • 举报
回复
路过学习学习
  • 打赏
  • 举报
回复
你得看是哪一方面的本质了。 函数说到底就是一个地址,执行一个函数,在汇编级别就是: call 0x78565536 另外,函数就是一堆操作的集合,比如你要在代码中经常写一些相似的代码,那么可以把这些代码整合到一个函数,那么你就不必每次都写一堆代码,而只要调用函数就可以了,方便开发,同时提高效率。
Orange_ou 2014-03-27
  • 打赏
  • 举报
回复
函数名 助记符吧
u014387999 2014-03-27
  • 打赏
  • 举报
回复
函数名是指针
加载更多回复(60)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧