C ++程序中函数的地址是什么? [英] What is the address of a function in a C++ program?

查看:134
本文介绍了C ++程序中函数的地址是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



函数的地址(入口点)是第一条指令的地址功能。 (据我所知)

因此我们可以说函数的地址和函数中第一条指令的地址是相同的(在这种情况下,指令是一个变量的初始化)。



但是下面的程序与上面的行相矛盾。

代码:

  #include< iostream> 
#include< stdio.h>
#include< string.h>
使用namespace std;
char ** fun()
{
static char * z =(char *)Merry Christmas :);
return& z;
}
int main()
{
char ** ptr = NULL;

char **(* fun_ptr)(); //指向函数的指针
fun_ptr =& fun;

ptr = fun();

printf(\ n%s \\\
函数地址= [%p],* ptr,fun_ptr);
printf(\\\
在fun()= [%p]中创建的第一个变量的地址,(void *)ptr);
cout<< endl;
返回0;
}

一个输出示例是:

 圣诞快乐:) 
函数地址= [0x400816]
在fun()= [0x600e10]中创建的第一个变量的地址

所以,函数地址和函数中第一个变量的地址不一样。为什么这样?



我在谷歌上搜索,但不能提出确切的必需答案,并且对这种语言不熟悉我完全无法捕捉到网上的一些内容。

解决方案


所以,这里函数的地址和第一个变量的地址在功能不一样。为什么如此?


为什么会这样?函数指针是指向函数的指针。无论如何,它并不指向函数中的第一个变量。

详细说来,函数(或子例程)是一组指令(包括变量定义和不同的语句/操作),根据需要执行特定的工作,大多数时间。它不仅仅是指向函数内元素的指针。



函数中定义的变量不存储在相同的内存中区域与可执行机器代码的区域相同。根据存储类型,函数内部存在的变量位于执行程序内存的其他部分。



当一个程序被编译(编译成一个目标文件)时,程序的不同部分以不同的方式组织起来。

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆