十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
要知道main函数也是由其他的程序调用的。
创新互联公司专注于青秀企业网站建设,成都响应式网站建设,电子商务商城网站建设。青秀网站建设公司,为青秀等地区提供建站服务。全流程按需制作网站,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
我们编写的程序,最终是不存在所谓的函数名的,有的只有内存单元地址0xffeedd00.
我们的程序执行时,程序加载到内存,比方说整个程序所占用的内存范围是0xffee0000 ~ 0xffeedd00,这么多。
假设程序有一个小函数fun(),那么它的范围可能是0xffee0000~0xffee00ff。
那么函数fun()的入口地址是多少? 0xffee0000。。
那么函数名fun实际上就是0xffee0000的别称。
你用一个指针指向这个函数,那么你把 指针 = 函数名,实际就是把0xffee0000这个内存单元的地址给指针p。
所以,结论是:
函数名 是 程序在执行时, 函数所占内存单元块的 首地址 的别称。
#include stdio.h
void f()
{
}
void main()
{
printf("%u\n", f);
printf("%u\n", f);
printf("%p\n", f);
}
主函数中前两行%u表示输出无符号的十进制,而第三行%p表示输出地址,其结果是一个十六进制的数,你将其转换成十进制,你会发现与前两行结果一样。
C语言中,所有的变量都存储在内存中,可以通过运算符获得变量的内存地址,函数调用时,只需要把普通变量前加上符号,就可以达到传递变量地址的目的。例如:定义一个结构体类型structYearmonthday{intyear,month,day;};定义相关函数
是。在C语言中,一个函数的函数名其实就是一个地址,即该函数的入口地址。我们可以声明一个函数指针,并将函数的入口地址(函数名)赋值给这个指针,然后使用这个指针来调用具体的函数。
再学习函数指针的时候,见过这么一个例子:
int func(int x); /* 声明一个函数 */
void (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
所以 函数名代表函数的入口地址吧
1、获得函数的地址
函数名实际上就是指针,所以可以通过强制类型转换来获取函数的地址。
int i = 0;
i = (int)main;
printf(“%d\n”,i);
这样我们就获取了main函数的地址了,其他的自定义的函数也是同样的道理啊。
2、获取变量地址
int variab = 0;
int addrvar = 0;
addrvar = (int)variab;
在变量addrvar中保存了变量variab的地址。
3、获得数组的地址
数组本身就是指针,它本身就是内存地址,和获得函数地址的方法一样啊。比如
int array[10];
int addrarr;
addrarr = (int)array;