函数定义的一般形式如下:
类型说明符 函数名([形式参数列表])
{
函数体
}
函数一般包括用户自定义的函数和系统提供的标准函数,对于用户自定义的函数,应该遵循“先定义,后使用”的原则。
函数定义通常由两部分组成:函数首部(也叫函数头)和函数体。
函数定义的一般形式如下: 类型说明符 函数名([形式参数列表])
{
声明部分 语句
}
在C语言中,函数体部分可以为空(即仅有一对花括号),这样的函数称为“空函数”,
其一般形式如下:
类型说明符 函数名( )
{
}
由于函数体中没有任何语句,这种函数什么也不做。
函数定义不能嵌套,即函数体内不能定义函数,函数定义应该在所有函数之外。
函数调用的一般形式 函数定义后,要通过函数调用来使用该函数的功能。函数调用是指从一个函数内部转去执行另一个函数,以实现控制的转移和相互间的数据传送。一般来说,调用函数时通过给出实际参数实现数据传送,当被调用函数执行完毕,控制返回到前面调用它的地方。
函数调用的一般形式如下:
函数名([实际参数列表]);
如果是调用无参函数,则实际参数列表为空,但括号不能省略。如果实参列表包含多个实参,则各实参之间用逗号分隔。实参列表中的参数可以是常量、变量或其它类型的数据及表达式。
实参列表与形参列表的个数应相等, 类型应一致,顺序应对应。
函数参数的传递
函数调用中发生的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
函数的形参和实参的特点如下:
(1) 形参变量只有在函数被调用时才分配内存单元,在调用结束时,立刻释放所分配的内存单元,因此形参只有在函数内部有效。
(2) 实参可以是常量、变量、表达式和函数等,无论实参是何种类型,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
(3) 实参和形参在数量、类型和顺序上应严格一致,否则会发生类型不匹配的错误。
参数传递方式 值传递方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。
函数声明与函数定义的首部很相似,但是二者之间有着本质的不同。
函数定义时,函数类型、函数名、形参表及函数体是一个整体,而函数声明仅是对被调用函数的说明,其作用仅仅是告诉C编译器被调用函数的类型、名称以及其使用的参数类型。