c语言中能不能定义函数数组
发布时间:2025-05-12 03:51:01 发布人:远客网络
一、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字节的数据项。