小编hel*_*arn的帖子

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

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

例如:这段代码:

#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数据段/代码段的确切关系有点混淆.任何有用的指示都会非常受欢迎.另外,我的第一个问题,所以请温柔,我真的想学习.谢谢!

c pointers function-pointers

7
推荐指数
1
解决办法
790
查看次数

声明为"const"的全局初始化变量转到文本段,而声明为"Static"的全局初始化变量转到数据段.为什么?

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

变量是全局变量,应该可以从可执行文件中的任何地方访问(因为没有"静态"),但是如果它是变量,我不知道它为什么放在文本段而不是数据段?

c static elf

6
推荐指数
2
解决办法
4489
查看次数

标签 统计

c ×2

elf ×1

function-pointers ×1

pointers ×1

static ×1