试图理解指向函数的指针实际代表什么?是函数所在代码段中的地址吗?
例如:这段代码:
#include <stdio.h>
void foo(void)
{
}
int main(void)
{
int a = 10;
printf("a's address: %p\n", &a);
printf("foo's address: %p\n", foo);
return 0;
}
...打印这个:
[sh/prog-exercises/adam]:./a.out
a's address: 0xbfffb414
foo's address: 0x8048430
我想我对进程的堆栈/堆与 ELF 数据段/代码段的确切关联有点困惑。非常欢迎任何有用的指示。另外,我的第一个问题,所以请保持温和,我真的很想学习。谢谢!
最佳答案
这是函数入口点的地址 - 其代码的开始。 a
变量位于堆栈上,因此它的地址有显着差异也就不足为奇了 - 堆栈和代码被分配了不同的代码区域,它们可能相距很远。
关于c - 函数指针的指针值代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930306/