c语言中, 函数名也称为函数的指针,那函数名是否也占内存空间?

如题所述

ShowMenu是一个函数名,可以看到他的值是一个地址。

&ShowMenu是对函数取地址,指向和ShowMenu同样的地址。

可以看出,ShowMenu是占用一个字节的,而作为指针&ShowMenu却占用四个字节。

所以说,函数名占用空间的。

追问

运算符也占字节?

那是什么?怎么还可以显示函数名所站字节?

追答

随便写的一个函数,在调试的时候,你可以查看任何变量的值。当然也可以查看函数名的值。

运算符是不占字节的。

难道你不会调试吗???

追问

我是初学者 我说的是c语言

那为啥showmenu占一字节 而加个&取址运算就变4字节了?

追答

ShowMenu是一个函数名,可以看成一个标志,或者一个映射,就占用1个字节,就相当于一个char 类型的字符串占用的空间。而&ShowMenu则是一个地址,而在64为的机器里,所有地址都是用4个字节来表示,就相当于一个int型的数据占用的空间。

个人的片面理解,难免有误。

还请查看专业资料。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-19
首先你上面的话是错误的,函数名是一段指令的入口地址,它是地址常量,不占用内存空间,只是在编译阶段存在于编译器的符号表中,例如函数的入口地址是0x123456,在翻译成机器指令以后,函数名是不存在的其在本质上对应汇编上的jump指令,在执行函数的时候,跳转到0x123456,这个函数名的本质就是这个地址。本回答被网友采纳
第2个回答  2013-12-11
函数名也称为函数的指针, 函数名是函数的首地址,指针当然占空间
第3个回答  2013-12-12
经过编译后,函数实际变成了一小段机器代码,并直接通过内存地址进行跳转,本身将不会有名字了,所以不再存在函数名这样的东西。

C语言是高级语言,我们看见的源代码,是给人理解和表达的。CPU能理解的,只能是二进制的机器码。
相似回答