重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在一个函数定义中,函数体之前的所有部分称为函数头,它给出了该函数的返回类型、每个参数的次序和类型等函数原型信息,所以当没有专门给出函数原型说明语句时,系统就从函数头中获取函数原型信息。
创新互联公司公司2013年成立,是专业互联网技术服务公司,拥有项目网站制作、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元蠡县做网站,已为上家服务,为蠡县各地企业和个人服务,联系电话:18982081108
一个函数的原型语句就是其函数头的一个拷贝,当然要在最后加上语句接上结束符分号。函数原型语句与函数头也有细微的差别,在函数原型语句中,其参数表中的每个参数允许只保留参数类型,而省略参数名,并且若使用参数名也允许与函数头中对应的参数名不同。
全文如下:
一)、定义格式
类型名 函数名 ([参数表]) 函数体
类型名为系统或用户已定义的一种数据类型,它是函数执行过程中通过return语句要求返回的值的类型,又称为该函数的类型。当一个函数不需要通过return语句返回一个值时,称为无返回值函数或无类型函数,此时需要使用保留字void作为类型名。当类型名为int时,可以省略不写,但为了清楚起见,还是写明为好。
函数名是用户为函数所起的名字,它是一个标识符,应符合C++标识符的一般命名规则,用户通过使用这个函数名和实参表可以调用该函数。
参数表又称形式参数表,它包含有任意多个(含0个,即没有)参数说明项,当多于一个时其前后两个参数说明项之间必须用逗号分开。每个参数说明项由一种已定义的数据类型和一个变量标识符组成,该变量标识符成为该函数的形式参数,简称形参,形参前面给出的数据类型称为该形参的类型。一个函数定义中的参数表可以被省略,表明该函数为无参函数,若参数表用void取代,则也表明是无参函数,若参数表不为空,同时又不是保留字void,则称为带参函数。
函数体是一条复合语句,它以左花括号开始,到右花括号结束,中间为一条或若干条C++语句。
在一个函数的参数表中,每个参数可以为任一种数据类型,包括普通类型、指针类型、数组类型、引用类型等,一个函数的返回值可以是除数组类型之外的任何类型,包括普通类型、指针类型和引用类型等。另外,当不需要返回值时,应把函数定义为void类型。
二)、定义格式举例
(1) void f1() {...}
(2) void f2(int x) {...}
(3) int f3(int x,int* p) {...}
(4) char* f4(char a[]){...}
(5) int f5(int x,double d) {...}
(6) int f6(int b[10], int n) {...}
(7) void f7(float c[][N], int m, float max) {...}
(8) bool f8(ElemType* bt, ElemType item) {...}
在第一条函数定义中,函数名为f1,函数类型为void,参数表为空,此函数是一个无参无类型函数。若在f1后面的圆括号内写入保留字void,也表示为无参函数。
在第二条函数定义中,仅带有一个类型为int的形参变量x,该函数没有返回值。
在第三条函数定义中,函数名为f3,函数类型为int,函数参数为x和p,其中x为int型普通参数,p为int*型指针参数。
在第四条函数定义中,函数名为f4,函数类型为char*,即字符指针类型,参数表中包含一个一维字符数组参数。注意:在定义任何类型的一维数组参数时,不需要给出维的尺寸,当然给出也是允许的,但没有任何意义。
在第五条函数定义中,函数名为f5,返回类型为int,该函数带有两个形参,一个为 整型引用变量x,另一个为双精度变量d。
在第六条函数定义中,函数名为f6,函数类型为int,即整型引用,该函数带有两个形参,一个是整型数组b,另一个是整型变量n。在这里定义形参数组b所给出的维的尺寸10可以被省略。
在第七条函数定义中,函数名为f7,无函数类型,参数表中包含三个参数,一个为二维单精度型数组c,第二个为整型变量m,第三个为单精度引用变量max。注意:当定义一个二维数组参数时,第二维的尺寸必须给出,并且必须是一个常量表达式,第一维尺寸可给出也可不给出,其作用相同。
在第八条函数定义中,函数名为f8,返回类型为bool,即逻辑类型,该函数带有两个参数,一个为形参bt,它为ElemType的指针引用类型,另一个为形参item,它是ElemType的引用类型,其中ElemType为一种用户定义的类型或是通过typedef语句定义的一个类型的别名。
三)、有关函数定义的几点说明
1. 函数原型语句
在一个函数定义中,函数体之前的所有部分称为函数头,它给出了该函数的返回类型、每个参数的次序和类型等函数原型信息,所以当没有专门给出函数原型说明语句时,系统就从函数头中获取函数原型信息。
一个函数必须先定义或声明而后才能被调用,否则编译程序无法判断该调用的正确性。一个函数的声明是通过使用一条函数原型语句实现的,当然使用多条相同的原型语句声明同一个函数虽然多余但也是允许的,编译时不会出现错误。
在一个完整的程序中,函数的定义和函数的调用可以在同一个程序文件中,也可以处在不同的程序文件中,但必须确保函数原型语句与函数调用表达式出现在同一个文件中,并且函数原型语句出现在前,函数的调用出现在后。
通常把一个程序中用户定义的所有函数的原型语句组织在一起,构成一个头文件,让该程序中所含的每个程序文件的开始(即所有函数定义之前)包含这个头文件(通过#include命令实现),这样不管每个函数的定义在哪里出现,都能够确保函数先声明后使用(即调用)这一原则的实现。
一个函数的原型语句就是其函数头的一个拷贝,当然要在最后加上语句接上结束符分号。函数原型语句与函数头也有细微的差别,在函数原型语句中,其参数表中的每个参数允许只保留参数类型,而省略参数名,并且若使用参数名也允许与函数头中对应的参数名不同。
2. 常量形参
在定义一个函数时,若只允许函数体访问一个形参的值,不允许修改它的值,则应把该形参说明为常量,这只要在形参说明的前面加上const保留字进行修饰即可。如:
void f9(const int x, const char y);
void f10(const char* p, char key);
在函数f9的函数体中只允许使用x和y的值,不允许修改它们的值。在函数f10的函数体中只允许使用p所指向的字符对象或字符数组对象的值,不允许修改它们的值,但在函数体中既允许使用也允许修改形参key的值。
3. 缺省参数
在一个函数定义中,可根据需要对参数表末尾的一个或连续若干个参数给出缺省值,当调用这个函数时,若实参表中没有给出对应的实参,则形参将采用这个缺省值。如:
void f11(int x, int y=0) {...}
int f12(int a[], char op='+', int k=10) {...}
函数f11的定义带有两个参数,分别为整型变量x和y,并且y带有缺省值0,若调用该函数的表达式为f11(a,b),将把a的值赋给x,把b的值赋给y,接着执行函数体;若调用该函数的表达式为f11(a+b),则也是正确的调用格式,它将把a+b的值赋给x,因y没有对应的实参,将采用缺省值0,参数传送后接着执行函数体。
函数f12的定义带有三个参数,其中后两个带有缺省值,所以调用它的函数格式有三种,一种只带一个实参,用于向形参a传送数据,后两个形参采用缺省值,第二种带有两个实参,用于分别向形参a和op传送数据,第三个形参采用缺省值,第三种带有三个实参,分别用于传送给三个形参。
若一个函数带有专门的函数原型语句,则形参的缺省值只能在该函数原型语句中给出,不允许在函数头中给出。如对于上述的f11和f12函数,其对应的函数原型语句分别为:
void f11(int x, int y=0);
int f12(int a[], char op='+', int k=10);
函数定义应分别改写为:
void f11(int x, int y) {...}
int f12(int a[], char op, int k) {...}
4. 数组参数
在函数定义中的每个数组参数实际上是指向元素类型的指针参数。对于一维数组参数说明:
数据类型 数组名[]
它与下面的指针参数说明完全等价:
数据类型 *指针变量名
其中指针变量名就是数组参数说明中的数组名。如对于f12函数定义中的数组参数说明int a[],等价于指针参数说明int* a。也就是说,数组参数说明中的数组名a是一个类型为int*的形参。注意:在变量定义语句中定义的数组,其数组名代表的是一个数组,它的值是指向第一个元素的指针常量,这与数组形参的含义有区别。
对于二维数组参数说明:
数据类型 参数名[][第二维尺寸]
它与下面的指针参数说明完全等价:
数据类型 (*参数名)[第二维尺寸]
如对于f7函数定义中的二维数组参数说明float c[][N],等价于指针参数说明float(*c)[N]。
5. 函数类型
当调用一个函数时就执行一遍循环体,对于类型为非void的函数,函数体中至少必须带有一条return语句,并且每条return语句必须带有一个表达式,当执行到任一条return语句时,将计算出它的表达式的值,结束整个函数的调用过程,把这个值作为所求的函数值带回到调用位置,参与相应的运算;对于类型为void的函数,它不需要返回任何函数值,所以在函数体中既可以使用return语句,也可以不使用,对于使用的每条return语句不允许也不需要带有表达式,当执行到任一条return语句时,或执行到函数体最后结束位置时,将结束函数的调用过程,返回到调用位置向下继续执行。
6. 内联函数
当在一个函数的定义或声明前加上关键字inline则就把该函数声明为内联函数。计算机在执行一般函数的调用时,无论该函数多么简单或复杂,都要经过参数传递、执行函数体和返回等操作。若把一个函数声明为内联函数后,在程序编译阶段系统就有可能把所有调用该函数的地方都直接替换为该函数的执行代码,由此省去函数调用时的参数传递和返回操作,从而加快整个程序的执行速度。通常可把一些相对简单的函数声明为内联函数,对于较复杂的函数则不应声明为内联函数。从用户的角度看,调用内联函数和一般函数没有任何区别。下面就是一个内联函数定义的例子,它返回形参值的立方。
inline int cube(int n)
{
return n*n*n;
}
stdio.h是c的头文件,包含了对你使用的函数的声明。
当你决定使用某个函数的时候,你去查它的帮助信息,都会看到这个函数的声明是包含在哪个头文件的,这样你就可以把它包含进来,从而使用这个函数。
具体请查阅c语言对于include的讲解,还有对于函数,变量的声明部分。 include stdio.h 是C的输入输出函数,但在C++中使用可以省略.
#include math.h 是数学函数,譬如你要用到squar()函数时就必须添加这个头文件.
#include string.h是字符窜函数.
#include stdlib.h呵呵,这个有点忘记了,好久没有用了,不好意思啊
反正这几个是常用的,其他还有很多很多,呵呵,自己可以看书后面的几页都有介绍的呢!~ #includeiostream.h:此头文件申明了所有I/O操作所需的基本服务,即支持流的输入输出操作,譬如程序中有cin ,cout
#includeiomanip.h:此头文件说明可以使用控制数据的输出格式,如设置数制、填充字符、精度、数据宽度等等,譬如使用setw()、setfill() 、setprecision()等
#include string.h是字符窜处理函数
#includeafx.h程序中要使用CString类
#include stdlib.h程序中要使用C语言系统提供的库函数gets和puts函数
回答者:雨之泪1988 - 助理 二级 2-6 08:35
stdio.h是输入输出头文件,所有有关输入输出的语句如"printf","scanf","putchar","getchar"等,都要用该头文件,头文件其实就是定义了这些函数的文件,它是系统提供给我们的接口
math.h是再进行数学运算时要包含的头文件,它提供了取绝对值,开方,求幂等数学运算
#includeconio.h与#includestdio.h 一样,是头文件包含。
这个头文件包含有许多库函数像#includestdio.h包含printf与
scanf一样,getch()也是其中一个函数,它的功能是无回显得到一
字符,常用这个函数做密码之类的程序。在TC中编译不需要加头文件
可以,编译器默认包含。就像在TC是不用加#includestdio.h一样。
但在VC中编译就要加了。否则系统认为你的函数没有定义。
其它头文件你只要再TC文件夹中看看include这个文件夹里面的文件就可以了
包括返回值,函数名,形参列表和函数体四个部分。
例如 :
int findmin(int a[],int n){
//函数体
return min;
}
以上函数int 是返回值,findmin是函数名, int a[] int n是形参列表
c++函数头,即头文件函数。
在C语言家族程序中,头文件被大量使用。一般而言,每个C++/C程序通常由头文件(header files)和定义文件(definition files)组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明(declaration),而定义文件用于保存程序的实现 (implementation)。 .c就是你写的程序文件。
C/C++头文件一览
C
#include assert.h//设定插入点
#include ctype.h //字符处理
#include errno.h //定义错误码
#include float.h //浮点数处理
#include iso646.h //对应各种运算符的宏
#include limits.h//定义各种数据类型最值的常量
#include locale.h//定义本地化C函数
#include math.h //定义数学函数
#include setjmp.h //异常处理支持
#include signal.h //信号机制支持
#include stdarg.h //不定参数列表支持
#include stddef.h //常用常量
#include stdio.h //定义输入/输出函数
#include stdlib.h//定义杂项函数及内存分配函数
#include string.h//字符串处理
#include time.h //定义关于时间的函数
#include wchar.h //宽字符处理及输入/输出
#include wctype.h//宽字符分类
传统C++
#include fstream.h //改用fstream
#include iomanip.h //改用iomainip
#include iostream.h //改用iostream
#include strstrea.h //该类不再支持,改用sstream中的stringstream
————————————————————————————————
标准C++
#include algorithm //STL 通用算法
#include bitset //STL 位集容器
#include cctype //字符处理
#include cerrno //定义错误码
#include cfloat //浮点数处理
#include ciso646 //对应各种运算符的宏
#include climits //定义各种数据类型最值的常量
#include clocale //定义本地化函数
#include cmath //定义数学函数
#include complex //复数类
#include csignal //信号机制支持
#include csetjmp //异常处理支持
#include cstdarg //不定参数列表支持
#include cstddef //常用常量
#include cstdio //定义输入/输出函数
#include cstdlib //定义杂项函数及内存分配函数
#include cstring //字符串处理
#include ctime //定义关于时间的函数
#include cwchar //宽字符处理及输入/输出
#include cwctype //宽字符分类
#include deque //STL 双端队列容器
#include exception //异常处理类
#include fstream //文件输入/输出
#include functional //STL 定义运算函数(代替运算符)
#include limits //定义各种数据类型最值常量
#include list//STL 线性列表容器
#include locale //本地化特定信息
#include map //STL 映射容器
#include memory //STL通过分配器进行的内存分配
#includenew //动态内存分配
#include numeric //STL常用的数字操作
#include iomanip //参数化输入/输出
#include ios //基本输入/输出支持
#include iosfwd //输入/输出系统使用的前置声明
#include iostream //数据流输入/输出
#include istream //基本输入流
#include iterator //STL迭代器
#include ostream //基本输出流
#include queue //STL 队列容器
#include set //STL 集合容器
#include sstream //基于字符串的流
#include stack //STL 堆栈容器
#include stdexcept //标准异常类
#include streambuf //底层输入/输出支持
#include string //字符串类
#include typeinfo //运行期间类型信息
#include utility //STL 通用模板类
#include valarray //对包含值的数组的操作
#include vector //STL 动态数组容器
————————————————————————————————
C99增加的部分
#include complex.h //复数处理
#include fenv.h//浮点环境
#include inttypes.h//整数格式转换
#include stdbool.h //布尔环境
#include stdint.h //整型环境
#include tgmath.h //通用类型数学宏
头文件 ctype.h
字符处理函数: 本类别函数用于对单个字符进行处理,包括字符的类别测试和字符的大小写转换
----------------------------------------
字符测试是否字母和数字 isalnum
是否字母 isalpha
是否控制字符 iscntrl
是否数字 isdigit
是否可显示字符(除空格外) isgraph
是否可显示字符(包括空格) isprint
是否既不是空格,又不是字母和数字的可显示字符 ispunct
是否空格 isspace
是否大写字母 isupper
是否16进制数字(0-9,A-F)字符 isxdigit
字符大小写转换函数 转换为大写字母 toupper
转换为小写字母 tolower
头文件 local.h
地区化: 本类别的函数用于处理不同国家的语言差异。
----------------------------------------
地区控制 地区设置 setlocale
数字格式约定查询 国家的货币、日期、时间等的格式转换 localeconv
头文件 math.h
数学函数: 本分类给出了各种数学计算函数,必须提醒的是ANSIC标准中的数据格式并不符合IEEE754标准,一些C语言编译器却遵循IEEE754(例如frinklin C51)
----------------------------------------
反余弦 acos
反正弦 asin
反正切 atan
反正切2 atan2
余弦 cos
正弦 sin
正切 tan
双曲余弦 cosh
双曲正弦 sinh
双曲正切 tanh
指数函数 exp
指数分解函数 frexp
乘积指数函数 fdexp
自然对数 log
以10为底的对数 log10
浮点数分解函数 modf
幂函数 pow
平方根函数 sqrt
求下限接近整数 ceil
绝对值 fabs
求上限接近整数 floor
求余数 fmod
头文件 setjmp.h io.h
本分类函数用于实现在不同底函数之间直接跳转代码。
----------------------------------------
保存调用环境 setjmp
恢复调用环境 longjmp
头文件 signal.h
信号处理: 该分类函数用于处理那些在程序执行过程中发生例外的情况。
----------------------------------------
指定信号处理函数 signal
发送信号 raise
头文件 stdarg.h
可变参数处理: 本类函数用于实现诸如printf,scanf等参数数量可变底函数。
----------------------------------------
可变参数访问宏
可变参数开始宏 va_start
可变参数结束宏 va_end
可变参数访问宏 访问下一个可变参数宏 va_arg
头文件 stdio.h
输入输出函数:该分类用于处理包括文件、控制台等各种输入输出设备,各种函数以“流”的方式实现
----------------------------------------
删除文件 remove
修改文件名称 rename
生成临时文件名称 tmpfile
得到临时文件路径 tmpnam
文件访问 关闭文件 fclose
刷新缓冲区 fflush
打开文件 fopen
将已存在的流指针和新文件连接 freopen
设置磁盘缓冲区 setbuf
设置磁盘缓冲区 setvbuf
格式化输入与输出函数
格式输出 fprintf
格式输入 fscanf
格式输出(控制台) printf
格式输入(控制台) scanf
格式输出到缓冲区 sprintf
从缓冲区中按格式输入 sscanf
格式化输出 vfprintf
格式化输出 vprintf
格式化输出 vsprintf
字符输入输出函数
输入一个字符 fgetc
字符串输入 fgets
字符输出 fputc
字符串输出 fputs
字符输入(控制台) getc
字符输入(控制台) getchar
字符串输入(控制台) gets
字符输出(控制台) putc
字符输出(控制台) putchar
字符串输出(控制台) puts
字符输出到流的头部 ungetc
直接输入输出
直接流读操作 fread
直接流写操作 fwrite
文件定位函数
得到文件位置 fgetpos
文件位置移动 fseek
文件位置设置 fsetpos
得到文件位置 ftell
文件位置复零位 remind
错误处理函数
错误清除 clearerr
文件结尾判断 feof
文件错误检测 ferror
得到错误提示字符串 perror
头文件 stdlib.h
实用工具函数: 本分类给出了一些函数无法按以上分类,但又是编程所必须要的。
----------------------------------------
字符串转换函数
字符串转换为整数 atoi
字符串转换为长整数 atol
字符串转换为浮点数 strtod
字符串转换为长整数 strtol
字符串转换为无符号长整型 strtoul
伪随机序列产生函数
产生随机数 rand
设置随机函数的起动数值 srand
存储管理函数
分配存储器 calloc
释放存储器 free
存储器分配 malloc
重新分配存储器 realloc
环境通信
中止程序 abort
退出程序执行,并清除环境变量 atexit
退出程序执行 exit
读取环境参数 getenv
程序挂起,临时执行一个其他程序 system
搜索和排序工具 二分查找(数据必须已排序) bsearch
快速排序 qsort
整数运算函数 求绝对值 abs
得到除法运算底商和余数 div
求长整形底绝对值 labs
求长整形除法的商和余数 ldiv
多字节字符函数 得到多字节字符的字节数 mblen
得到多字节字符的字节数 mbtowc
多字节字符转换 wctomb
多字节字符的字符串操作 将多字节串转换为整数数组 mbstowcs
将多字节串转换为字符数组 mcstowbs
头文件 string.h
字符串处理: 本分类的函数用于对字符串进行合并、比较等操作
----------------------------------------
字符串拷贝 块拷贝(目的和源存储区不可重叠) memcpy
块拷贝(目的和源存储区可重叠) memmove
串拷贝 strcpy
按长度的串拷贝 strncpy
字符串连接函数 串连接 strcat
按长度连接字符串 strncat
串比较函数 块比较 memcmp
字符串比较 strcmp
字符串比较(用于非英文字符) strcoll
按长度对字符串比较 strncmp
字符串转换 strxfrm
字符与字符串查找 字符查找 memchr
字符查找 strchr
字符串查找 strcspn
字符串查找 strpbrk
字符串查找 strspn
字符串查找 strstr
字符串分解 strtok
杂类函数 字符串设置 memset
错误字符串映射 strerror
求字符串长度 strlen
头文件 time.h
日期和时间函数: 本类别给出时间和日期处理函数
----------------------------------------
时间操作函数得到处理器时间 clock
得到时间差 difftime
设置时间 mktime
得到时间 time
时间转换函数 得到以ASCII码表示的时间 asctime
得到字符串表示的时间 ctime
得到指定格式的时间 strftime
序号 库类别 头文件
----------------------------------------
1 错误处理 errno.h
2 字符处理 ctyphe.
3 地区化 local.h
4 数学函数 math.h
5 信号处理 signal.h
6 输入输出 stdio.h
7 实用工具程序 stdlib.h
8 字符串处理 string.h