В качестве функции задана команда, хранящаяся в одном непрерывном блоке памяти.
И адрес функции (точка входа) - это адрес первой инструкции в функции. (насколько мне известно)
Таким образом, мы можем сказать, что адрес функции и адрес первой команды в функции будут одинаковыми (в этом случае первая инструкция представляет собой инициализацию переменной.).
Но программа ниже противоречит приведенной выше строке.
код:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char ** fun()
{
static char * z = (char*)"Merry Christmas :)";
return &z;
}
int main()
{
char ** ptr = NULL;
char ** (*fun_ptr)(); //declaration of pointer to the function
fun_ptr = &fun;
ptr = fun();
printf("\n %s \n Address of function = [%p]", *ptr, fun_ptr);
printf("\n Address of first variable created in fun() = [%p]", (void*)ptr);
cout<<endl;
return 0;
}
Один пример вывода:
Merry Christmas :)
Address of function = [0x400816]
Address of first variable created in fun() = [0x600e10]
Итак, здесь адрес функции и адрес первой переменной в функции не такой. Почему так?
Я искал в google, но не могу найти точный требуемый ответ и быть новым для этого языка. Я точно не могу поймать часть содержимого в сети.