试图理解函数指针实际代表什么?它是函数所在代码段中的地址吗?
例如:这段代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
...打印这个:
[sh/prog-exercises/adam]:./a.out
a's address: 0xbfffb414
foo's address: 0x8048430
Run Code Online (Sandbox Code Playgroud)
我想我对进程的堆栈/堆与ELF数据段/代码段的确切关系有点混淆.任何有用的指示都会非常受欢迎.另外,我的第一个问题,所以请温柔,我真的想学习.谢谢!
#include <stdio.h>
const int str[1000] = {0};
int main(void)
{
printf("arr is %d\n", str[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有以下输出:
[-exercises/adam/stack2]:size a.out
text data bss dec hex filename
5133 272 24 5429 1535 a.out
Run Code Online (Sandbox Code Playgroud)
鉴于:
#include <stdio.h>
static int str[1000] = {0};
int main(void)
{
printf("arr is %d\n", str[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有以下输出:
[-exercises/adam/stack2]:size a.out
text data bss dec hex filename
1080 4292 24 5396 1514 a.out
Run Code Online (Sandbox Code Playgroud)
当数组未初始化时 - 它再次进入"const"的文本段和"静态"的BSS.
变量是全局变量,应该可以从可执行文件中的任何地方访问(因为没有"静态"),但是如果它是变量,我不知道它为什么放在文本段而不是数据段?