高手解惑下,函数指针的调用过程是怎么样的?

pauliuyou 2008-05-02 06:10:22
如题,函数名是函数的入口, 问题是咋调用的?
...全文
117 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Treazy 2008-05-03
  • 打赏
  • 举报
回复
找到一个地址,如果这个地址开始是一段程序,那就运行了
ChikoHu 2008-05-03
  • 打赏
  • 举报
回复
就是压栈,保存地址
跳转,出栈,执行,
返回值压栈,跳转返回

和一般的函数调用一样
Oversense 2008-05-03
  • 打赏
  • 举报
回复
就是内存里面的一个地址而已,比如 0x8000012
直接 jmp 过去就可以了
michney 2008-05-02
  • 打赏
  • 举报
回复
就是压栈,保存地址
跳转,出栈,执行,
返回值压栈,跳转返回

和一般的函数调用一样
rushman 2008-05-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 pauliuyou 的帖子:]
如题,函数名是函数的入口, 问题是咋调用的?
[/Quote]
像普通的函数那样调用……
没啥特别的
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 baihacker 的回复:]
函数指针的类型决定了参数和返回值
这个指针的值决定了函数的开始地址

所以,先把参数入栈,然后在从这个地址开始运行程序,最后处理返回值
[/Quote]
pauliuyou 2008-05-02
  • 打赏
  • 举报
回复
比如

void hello()
{
printf("hello");
}

int main()
{
int local = 10;
printf("local addr : %d method addr : %d",&local,&hello);
}

函数地址好象是在堆内存中?和局部变量不是一块的。比较迷惑

clhposs 2008-05-02
  • 打赏
  • 举报
回复
#include <stdio.h> 
void print()
{
printf("Hello,word");
}
int main()
{
void (*p)();
p=print;
p(); //这样
return 0;
}
baihacker 2008-05-02
  • 打赏
  • 举报
回复
函数指针的类型决定了参数和返回值
这个指针的值决定了函数的开始地址

所以,先把参数入栈,然后在从这个地址开始运行程序,最后处理返回值
clhposs 2008-05-02
  • 打赏
  • 举报
回复
#include<stdio.h>
void print()
{
printf("Hello,word");
}
int main()
{
print(); //这样
return 0;
}
blh 2008-05-02
  • 打赏
  • 举报
回复
typedef int (*INT_TYPE)(int n);

int test(int n)
{
return n * 10;
}

int main()
{
INT_TYPE it = test;
printf("%d\n", it(5));
return 0;
}

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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