【发布时间】:2013-08-19 11:12:27
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int (*fptr1)(int);
int square(int num){
return num*num;
}
void main(){
fptr1 = □
printf("%d\n",fptr1(5));
}
有人可以简单解释一下当我们调用函数指针时堆栈中会发生什么吗?在 main() 中直接调用函数和 C 语言中通过函数指针通过物理内存和进程的方式调用有什么区别?
我试图了解当我们使用函数指针调用函数时内存中会发生什么,但这对我来说还不够。
- 当我们通过指针调用函数时,指针是否在代码空间中拥有该函数的位置?
- 被调用函数在运行时是否和main()中正常调用的函数一样?
- 在流水线分支预测处理器中运行代码时,直接调用函数或使用函数指针有什么区别?
【问题讨论】:
-
请注意,
void main()在 C(或 C++)中无效 — 在标准 C、基于 Unix 的 C 或 Microsoft C 中均无效。它应该是int main()。 -
感谢有关 main 的警告
标签: c stack function-pointers