• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

C学习-基础:函数

函数形式

类型标识符  函数名(形式参数表){

说明部分语句 

}

类型标识符:若不说明类型,默认整型处理;

形参:是被初始化的内部变量,寿命和可见性仅限于函数内部。

说明部分语句:要执行的语句。“空函数”是指 没有说明部分语句,形如:函数类型  函数名( ){ }

函数(原型)声明

类型标识符 被调用函数名(含类型声明的形参表);

  • 函数在使用前必须先声明。函数声明称为函数原型说明。

  • 对于库函数,在 #include “ xxx.h”的文件中已包括了函数的原型说明,C的库文件(“xxx.c”)中则包含了函数实现的代码。因此可直接调用

函数的声明定义了:

  • 函数的名字

  • 函数参数的个数类型参数名字可有可

  • 函数返回值的类型

如:double fun1(double,int n1);

函数声明的位置:

  • 主调函数中使用前声明原型

  • 所有函数之前声明原型

  • 如果被调用函数的定义出现在主调函数之前,可以不必加以说明。 

函数的调用

函数的调用形式

函数名(实参);

函数调用过程中的数据传递

  • 形参:系统在其函数被调用时为其分配内存

  • 实参:可以是常量变量达式

  • 单向值传递:实参 --> 形参

函数调用应遵守的规则:

  • 形参和实参 数量一一对应

  • 形参和实参 类型一一对应

  • 形参和实参 位置一一对应

如果主调函数参数(即实参)与被调函数参数(即形参)类型不匹配,则主调函数参数(实参)转变为被调函数的参数(形参)类型

各个实参传值给形参时是根据在表中的位置(而不是名字)结合

函数的返回值

  • 通过 return 语句返回。

  • return 语句只能一个返回值传递给调用函数。

  • 返回值的类型定义的函数类型,若 return 语句中表达式类型与函数类型不一致,则转换为函数类型

  • 返回值可以数值也可是地址。当返回值是地址时,应该用指针接受它(后述)

  • 无返回值的函数,定义为 void 类型

数组作为函数参数

  • 数组元素作参数,与单个变量一样。

  • 数组名作参数,传送的是数组首地址。形、实参数都可以是数组名,类型要一样,

  • 函数原型应该体现参数是一个数组,故用空[ ]表示数组。

  • 在C语言中并不给形参数组分配实际的空间,所以在函数中就没必要知道数组的大小。数组大小只在实参数组定义中明确(为了申请内存空间)。

  • C编译系统对形参数组大小不作检查,只是将实参数组的首地址传给形参数组,所以形参数组可以不指定大小,但为了在被调用函数中处理数组元素的需要,可以另设一个参数,用以传递数组元素的个数。如下:

 void ClearIntArray(int array[ ], int n)
{ int i; for( i = 0; i<n; i++)    array[i] = 0; }

例子(数组作为函数参数):已知某学生5门课程的成绩,求平均成绩

#include <stdio.h>
float aver(float a[]); // 函数原型声明

int main(int argc, char const *argv[])
{
    int waitag;
    float score[5], av;
    int i;
    printf("Input 5 scores:\n");
    for (i = 0; i < 5; i++)
        scanf("%f", &score[i]);
    av = aver(score); /* 调用函数,实参为数组名 */
    printf("average score is %8.3f\n", av);
    scanf("%d", &waitag);
    return 0;
}

float aver(float a[]) //被调函数
{
    int i;
    float av, sum = 0;
    for (i = 0; i < 5; i++)
        sum += a[i];
    av = sum / 5;
    return av;
}

运行结果

Input 5 scores:
50 45 55 60 40
average score is   50.000




0
0
下一篇:C学习-基础:指针的基本概念、定义与引用

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。