c语言用系统的函数开头 c语言如何调用系统函数( 三 )


一个函数的原型语句就是其函数头的一个拷贝,当然要在最后加上语句接上结束符分号 。函数原型语句与函数头也有细微的差别,在函数原型语句中,其参数表中的每个参数允许只保留参数类型 , 而省略参数名,并且若使用参数名也允许与函数头中对应的参数名不同 。
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] 。
【c语言用系统的函数开头 c语言如何调用系统函数】5. 函数类型
当调用一个函数时就执行一遍循环体,对于类型为非void的函数,函数体中至少必须带有一条return语句 , 并且每条return语句必须带有一个表达式,当执行到任一条return语句时,将计算出它的表达式的值,结束整个函数的调用过程,把这个值作为所求的函数值带回到调用位置,参与相应的运算;对于类型为void的函数,它不需要返回任何函数值,所以在函数体中既可以使用return语句,也可以不使用,对于使用的每条return语句不允许也不需要带有表达式 , 当执行到任一条return语句时 , 或执行到函数体最后结束位置时,将结束函数的调用过程,返回到调用位置向下继续执行 。

推荐阅读