您当前的位置:首页 > 互联网教程

c语言中能不能定义函数数组

发布时间:2025-05-12 03:51:01    发布人:远客网络

c语言中能不能定义函数数组

一、c语言中能不能定义函数数组

函数不可以定义为数组,可以用函数指针来操作。

1.函数指针的数组定义方法:返回值类型(*指针变量名[Number])(形参列表)。

double add(double a,double b){}

double sub(double a,double b){}

double mul(double a,double b){}

double div1(double a,double b){}

double(*oper_func[])(double, double)={add,sub,mul,div1};//函数指针的数组定义。

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

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

这两个概念都是简称,指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示:返回类型标识符*函数名称。

返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。

二、C语言中用函数做函数的形式参数的问题

1、给你举个例子吧,这样就容易理解得多。

2、例子:设计一个函数func();在调用它时每次实现不同的函数功能,输入两个参数a和b,第一次调用func()时找出a和b中的较大者,第二次调用找出较小者,第三次调用求a和b之和。

3、表示定义一个指向函数的指针变量p,在c语言中这个格式是固定的,前面的()表示p先和*结合,是指针变量,后面的()表示p指向一个函数。前面的()不能省略,如果写成

4、*p(),由于()优先级比*高,那就表示p()函数返回的是一个指针,p本身就是函数不是指针了,意思完全变了。

5、任何一个函数,函数名就是该函数的入口地址(起始地址),也就是说函数名就是个地址,从这个地址开始,函数占用一段内存单元。因此可以用一个指针变量来指向这个这个函数名,这样就相当于指向这个函数了。所以下面的max,min,add函数都是一个地址,分别调用时就是赋值p=max,p=min,p=add,也就是(*p)(x,y)分别就等于max(x,y),min(x,y),add(x,y).

6、程序在win-tc和Dev-c++下调试通过。

7、/*定义指向函数的指针变量p,关键1*/

8、/*调用相应函数,函数名即地址给p,这样p指向该函数,关键2*/

9、func(a,b,max);/*相当于赋值p=max*/

10、func(a,b,min);/*相当于赋值p=min*/

11、func(a,b,add);/*相当于赋值p=add*/

三、C语言中的标准函数有哪些

C语言输入输出函数有很多,标准I/O函数中包含了如下几个常用的函数:

scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.

getc主要是从文件中读出一个字符.常用的判断文件是否读取结束的语句为(ch= getc(fp))!= EOF.EOF为文件结束标志,定义在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定义在stdlib.h中一样,文件也可以被理解为一种流,所以当fp为stdin时,getc(stdin)就等同于getchar()了.

putc主要是把字符ch写到文件fp中去.如果fp为stdout,则putc就等同于putchar()了.

getchar主要是从标准输入流读取一个字符.默认的标准输入流即stdio.h中定义的stdin.但是从输入流中读取字符时又涉及到缓冲的问题,所以并不是在屏幕中敲上一个字符程序就会运行,一般是通过在屏幕上敲上回车键,然后将回车前的字符串放在缓冲区中,getchar就是在缓冲区中一个一个的读字符.当然也可以在while循环中指定终止字符,如下面的语句:while((c= getchar())!='#')这是以#来结束的.

putchar(ch)主要是把字符ch写到标准流stdout中去.

gets主要是从标准输入流读取字符串并回显,读到换行符时退出,并会将换行符省去.

puts主要是把字符串str写到标准流stdout中去,并会在输出到最后时添加一个换行符.

char*fgets(char*str, int num, FILE*fp)

str是存放读入的字符数组指针,num是最大允许的读入字符数,fp是文件指针.fgets的功能是读一行字符,该行的字符数不大于num-1.因为fgets函数会在末尾加上一个空字符以构成一个字符串.另外fgets在读取到换行符后不会将其省略.

fputs将str写入fp.fputs与puts的不同之处是fputs在打印时并不添加换行符.

fgetc从fp的当前位置读取一个字符.

fputc是将ch写入fp当前指定位置.

int fscanf(FILE*fp, char*format,输入列表)

fscanf按照指定格式从文件中出读出数据,并赋值到参数列表中.

int fprintf(FILE*fp, char*format,输出列表)

fprintf将格式化数据写入流式文件中.

对fread来说,它是读入数据的存放地址。

对fwrite来说,是要输出数据的地址(均指起始地址)。

count:要进行读写多少个size字节的数据项。