c语言头函数什么意思 c++头函数

c语言的函数头

在一个函数定义中,函数体之前的所有部分称为函数头,它给出了该函数的返回类型、每个参数的次序和类型等函数原型信息,所以当没有专门给出函数原型说明语句时,系统就从函数头中获取函数原型信息。

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比渝中网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式渝中网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖渝中地区。费用合理售后完善,十余年实体公司更值得信赖。

一个函数的原型语句就是其函数头的一个拷贝,当然要在最后加上语句接上结束符分号。函数原型语句与函数头也有细微的差别,在函数原型语句中,其参数表中的每个参数允许只保留参数类型,而省略参数名,并且若使用参数名也允许与函数头中对应的参数名不同。

全文如下:

一)、定义格式

类型名 函数名 ([参数表]) 函数体

类型名为系统或用户已定义的一种数据类型,它是函数执行过程中通过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;

}

C语言的头函数有什么作用?包括了什么东西在里面?

头函数在预处理里面,也就是在里面包含了很多的函数原型以及定义。

比如stdio.h中就包含printf,scanf等等函数。

不包含会报警告。

c++函数头是什么意思

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

C语言主函数和头文件是什么意思

主函数是一个程序的入口,程序第一个执行的函数。头文件就是一个函数的仓库,在C中使用某函数必须包含对应头文件。


本文标题:c语言头函数什么意思 c++头函数
文章源于:http://scyanting.com/article/dogsjdj.html