c - 函数指针的指针值代表什么?

标签 c pointers function-pointers

试图理解指向函数的指针实际代表什么?是函数所在代码段中的地址吗?

例如:这段代码:

#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/

相关文章:

Java - 修改列表会修改包含列表的对象

c++ - 二叉搜索树分割错误

c++ - 使用参数化函数c++

c++ - 带参数的函数 vector

c - %p 到底是什么?为什么它与使用 %d 打印指针的 int 值不同?

c - 无法获取正确的 Linux 内核头文件来构建内核模块

c - 如何找到导致 futex 设施失败的原因?

c - 我正在尝试用 C 编写程序以将 DS1302 RTC 与 PIC16F877a 一起使用

c++ - 在指针上设置指针的函数

c - 只给一个变量时while循环什么时候停止