⑴ c语言中函数名就是一个指针吗
是的。函数指针就是函数的指针,它是一个指针,指向一个函数。这正如用指针变量可指向整型变量、字符型、数组侍誉改一样,这里是指向函数。
例:
A) char * (*fun1)(char * p1,char * p2);
B) char * *fun2(char * p1,char * p2);
表达式相虚州比,唯一不同老判的就是函数的返回值类型为char**,是个二级指针。
C) char * fun3(char * p1,char * p2);
fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型。
(1)函数名编译后是不是一个地址扩展阅读
函数指针使用的例子
#include <stdio.h>
#include <string.h>
char * fun(char * p1,char * p2)
{
int i = 0;
i = strcmp(p1,p2);
if (0 == i)
{
return p1;
}
else
{
return p2;
}
}
int main()
{
char * (*pf)(char * p1,char * p2);
pf = &fun;
(*pf) ("aa","bb");
return 0;
}
⑵ c语言中函数得到数组不是一个地址吗
如果是把数组作为参数传入,那么得到的是一个地悉运茄址。
或者悄键更准确的说,得到的是一个指睁察针。
在C语言中,很多情况下指针和数组是可以通用的。
⑶ c语言中, 函数名也称为函数的指针,那函数名是否也占内存空间
ShowMenu是一个函脊族誉数名,可以看到他的值是一个地址。
&ShowMenu是对函数取地址樱段,指向和ShowMenu同样的地址。
可以看出,ShowMenu是占用一穗衡个字节的,而作为指针&ShowMenu却占用四个字节。
所以说,函数名占用空间的。
⑷ c语言函数入口地址是第一个形参地址吗
是。在C语言中,一此伏个函数的函数名其实就是一个地址,即该函数的坦顷入口地址。我们可以声明一个函数指针,并将函数的入口地址(函森信携数名)赋值给这个指针,然后使用这个指针来调用具体的函数。
⑸ C语言中,函数名代表函数的入口地址吗!!!求大神!求解析
要知道main函数也是由其他的程序调用的。
我们编写的程序,最终是不存在所谓的函隐返谈数名的,有的只有内存单元地址0xffeedd00.
我们的程序执行时,程序加载到内存,比方说整个程序所占用的内存范围是0xffee0000 ~ 0xffeedd00,这么多灶碰。
假设程序有一个小函数fun(),那么它的范围可能是0xffee0000~0xffee00ff。
那么函数fun()的入口地址是多少? 0xffee0000。。
那么函数名世兄fun实际上就是0xffee0000的别称。
你用一个指针指向这个函数,那么你把 指针 = 函数名,实际就是把0xffee0000这个内存单元的地址给指针p。
所以,结论是:
函数名 是 程序在执行时, 函数所占内存单元块的 首地址 的别称。
⑹ c语言中函数名就是一个指针吗
是的。c语言中, 函数名也称为函数的指针,所以c语言中函数名就是一个指针。
“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数颤凳。
如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后。
可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是槐悔取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样茄明旅的仅能得到一个返回值。
指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。
⑺ C语言中函数名不是代表函数存储单元的首地址吗为什么*函数名=函数名
感觉你说的是 “指向函数侍李的指针变量”
可以定义一个 函数指针变量,然后将一个函数名赋值给这个函数指针变量。
很多函数 是把一个函数指针 作为 参数来传递的。
举例:
int c,d;
int (*p)(int a,int b); //声明一个函数指针类型的变量,变量名为p,其类型是 int *(int a,int 老姿迟 //b)
int func1( int a,int b);//声明一个函数1
int func2(int f,int g);//声明一个函数2
p=func1; //将一个函数名赋值给一个函数指针变量
c=(*P)(34,69); //使用指针调用函数fun1
p=func2;
d=(*p)(50,90); //使用函数指针 调用函数func2
其它细节这里就不详细解答了,希望我的回答对你册基有点帮助,很高兴和你一起讨论和学习。
⑻ c语言中函数名就是地址吗
函数名在主函数里是个接口或者叫入口,你神握闷可以通游弯过定义一个指皮纳针来指向他
void * p;
int fun(int a);
p=fun;
⑼ 如何理解c语言中“一切都是地址”
C语言用变量来存储数据,用函数来定义一段可以重复使用的代码,它们最终都要放到内存中才能供 CPU 使用。
数据和代码都以二进制的形式存储在内存中,计算机无法从格式上区分某块内存到底存储的是数据还是代码。当程序被加载到内存前敬凳后,操作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据。
CPU 只能通过地址来取得内存中的代码和数据,程序在执行过程中会告知 CPU 要执行的代码以及要读写的数据的地址。如果程序不小心出错,或者开发者有意为之,在 CPU 要写入数据时给它一个代码区域的地址,就会发生内存访问错误。这种内存访问错误会被硬件和操作系统拦截,强制程序崩溃,程序员没有挽救的机会。
CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。
假设变量稿世 a、b、c 在内存中的地址分别是 0X1000、0X2000、0X3000,那么加法运算c = a + b;将会被转换成类似下面的形式:
0X3000 = (0X1000) + (0X2000);
( )表示取值操作,整个表达式的意思是,取出地址 0X1000 和 0X2000 上的值,将它们相加,把相加的结果赋值给地址为 0X3000 的内存
变量名和函数名为我们提供了方便,让我们在编写代码的过程中可以使用易于阅读和理解的英文字符串,不用直接面对二进制地址,那场景简直让人崩溃。
需要慧旅注意的是,虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。
⑽ C语言中,函数名代表函数的入口地址吗!!!求大神!求解析!
再学习函数指针的时候,见过这么一个例子差渣迅:
int func(int x); /* 声明一个函数 */
void (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
所以 函虚此数名代梁颂表函数的入口地址吧