再学习函数指针的时候,见过这么一个例子:
创新互联服务项目包括日照网站建设、日照网站制作、日照网页制作以及日照网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,日照网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到日照省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
int func(int x); /* 声明一个函数 */
void (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
所以 函数名代表函数的入口地址吧
要知道main函数也是由其他的程序调用的。
我们编写的程序,最终是不存在所谓的函数名的,有的只有内存单元地址0xffeedd00.
我们的程序执行时,程序加载到内存,比方说整个程序所占用的内存范围是0xffee0000 ~ 0xffeedd00,这么多。
假设程序有一个小函数fun(),那么它的范围可能是0xffee0000~0xffee00ff。
那么函数fun()的入口地址是多少? 0xffee0000。。
那么函数名fun实际上就是0xffee0000的别称。
你用一个指针指向这个函数,那么你把 指针 = 函数名,实际就是把0xffee0000这个内存单元的地址给指针p。
所以,结论是:
函数名 是 程序在执行时, 函数所占内存单元块的 首地址 的别称。
是。在C语言中,一个函数的函数名其实就是一个地址,即该函数的入口地址。我们可以声明一个函数指针,并将函数的入口地址(函数名)赋值给这个指针,然后使用这个指针来调用具体的函数。
main函数的名字是不能更改的。当你在编辑好一个简单的CUI应用程序后,比如应用VC6.0在生成cpp文件的时候编译器就根据你的选择设置好了链接器的开关。在对程序编译时,链接器将根据已经设置好的链接器开关寻找入口点函数,如果设置为控制台程序,就会自动寻找main,接着调用启动函数mainCRTStartup来运行。这些都是规定好的,操作系统实际并不调用你所写的入口函数,它会直接调用启动函数来引导程序的运行。
经常看到C语言的main函数定义为:
int main(int argc, char *argv[]),但是在函数体中经常是根本不用main函数中的这两个参数,这两个参数用于在运行程序时,从外部给程序传递参数,其中argc中保存了参数的个数,argv中分别保存了各个参数.
例如一个程序的main()函数头部形如int main(int argc, char *argv[]),编译链接后生成的可执行文件名为a.exe,那么请注意下面的调用:
a.exe abc def
在上面的命令行中,a.exe是要运行的程序名称,后面的abc和def就是传入程序的两个参数,这两个参数就通过argc和argv传入程序,注意这些参数都是字符串。
通过上面的调用,在这个程序中,argc=3,a.exe是第一个参数,这个字符串将保存在argv[0]中,abc和def分别是第二和第三个参数,它们分别被保存在argv[1]和argv[2]中