試圖瞭解指向函數的指針實際表示什麼?它是函數所在代碼段中的地址嗎?函數指針的指針值代表什麼?
對於例如:這段代碼:
#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數據段/代碼段。任何有用的指針將非常受歡迎。另外,我的第一個問題,所以請溫柔,我真的想學習。謝謝!
對,所以這裏的輸出表示這個特定函數已經作爲代碼段的一部分加載的位置?有沒有辦法讓C程序打印數據段,代碼段的開始/結束地址? – helpmelearn 2010-10-14 05:37:47
@helpmelearn:是的,這是函數啓動所在的地址。我不知道找到段地址的解決方案,我想這將取決於實施。也許有一些實用程序可以爲任何進程做到這一點。 – sharptooth 2010-10-14 05:42:52