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 *类型。

扩展资料

函数指针使用的例子

#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;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-25

是的。c语言中, 函数名也称为函数的指针,所以c语言中函数名就是一个指针。

“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后。

可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

扩展资料:

如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。

指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。

指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。

参考资料来源:百度百科--函数指针

参考资料来源:百度百科--C语言

本回答被网友采纳
第2个回答  推荐于2017-10-10

  c语言中, 函数名也称为函数的指针,所以c语言中函数名就是一个指针。

  1,例如:

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

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

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

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

2,‍函数指针


指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:


类型说明符 (*函数名)(参数)


其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明笔削和它指向函数的声明保持一致。


指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。


例如:


void (*fptr)();


把函数的地址赋值给函数指针,可以采用下面两种形式:


fptr=&Function;  fptr=Function;


取地址运算符&不是必需的,因为单单一个函数标识符就标号表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。可以采用如下两种方式来通过指针调用函数:


x=(*fptr)();  x=fptr();


第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。下面举一个例子:


void (*funcp)();  void FileFunc(),EditFunc();


main()  {


funcp=FileFunc;  (*funcp)();


funcp=EditFunc;  (*funcp)();


}  void FileFunc()


{   printf("FileFunc\n");


}  void EditFunc()


{  printf("EditFunc\n");  }


程序输出为:


FileFunc  EditFunc

第3个回答  2012-11-05
可以这样理解,函数名就像数组名一样,只不过函数名是代码段的指针,而数组名是数据段的指针本回答被提问者和网友采纳
第4个回答  2012-11-06
没错,函数名就像是数组名,也是指针,独有特点就是①存在于代码段、②定值(程序加载进内存后就不能改变了);相对的,普通的指针是可以移动的(改变他的指向)
相似回答