C语言基础知识之(九):函数

一、函数声明、定义和类型

1、函数定义:

定义函数包含四部分:

返回值类型 函数名(形式参数列表){

    函数体(实现函数功能代码)

}

2、函数四种类型

a、无返回值,无参数

void sayhi( ){

printf("Hello\n");

}

b、无返回值,有参数

void printSum(int n1, int n2){

printf("%d\n", n1+n2);

}

c、有返回值,有参数

int sumValue(int n1, int n2){

return n1+n2;

}

d、有返回值,无参数

int randomFrom20to40(){

   return arc4random() % 21 + 20;

}

void表示无返回值类型。

3、函数体内return的作用:

a、return后面的数值类型必须和返回值类型相同;

b、return (数值);将数值返回到调用函数的地方,结束函数运行;

c、return语句之后的代码不执行;

d、如果函数没有返回值,可以没有return语句,如果有return语句,return后面不再写任何语句,并以分号结束。

4、函数声明

函数声明一般包括:返回值类型 函数名 参数列表 分号结束

函数声明位置:在头文件中,并在所有函数的定义和main函数的前面。

5、函数定义的位置

在函数声明之后,或在main函数之后。

二、函数调用

1、函数调用直接使用:函数名( )

2、如果没有参数:必须写( )

3、如果有参数:函数需要几个参数,必须传入几个参数,传入的值必须和提示的类型相同

4、如果函数有返回值,

a、只调用,不接收函数,如:sumValue(3, 6);

b、调用函数,返回值参与运算或作为其他函数的参数。

printf("sum = %d\n", sumValue(37, 28));

printf("random value = %d\n", randomFrom20to40());

c、调用函数,使用变量接收返回值。

int sum = sumValue(2, 3);

printf("sum = %d\n", sum);

5、函数调用过程:

a、使用函数名调用函数

b、进入到被调用函数的函数体内运行代码

c、函数运行结束后,返回调用函数的位置

6、主调函数,即调用函数的函数,如:main函数。

被调函数,即在主调函数中调用到的函数,如:sumValue( )。

三、函数的形式参数和实际参数

形式参数:出现在函数定义中,存储传入函数中的值

实际参数:出现在函数调用时,给函数提供要使用的值。

如:2和3是调用sumValue时的实参,是提供给函数的值

printf("sum = %d\n",sumValue(2, 3));

注意:调用函数的时候是实现实参向形参传值,实参向形参传值是拷贝的过程,实参的值并不会改变。

四、函数变量的分类和作用域

1、函数变量分为全局变量和局部变量

2、全局变量

位置:在函数外部定义。

作用域:从全局变量定义开始的位置,下面的代码中都可以使用。

全局变量和局部变量可以重名。

全局变量可以在工程的多个文件中使用。

3、局部变量

位置:在函数内定义的变量,只在当前函数内有效

作用域:在函数的{ }内有效,函数外部不能使用

不同的函数中可以定义同名的变量,相同的函数内不要使用同名的变量。

函数的形参,只在当前函数内有效。

在某个代码段内定义的变量,只能在找这个代码段内使用,如:分支、循环。

在代码段{ }内,使用代码段内部定义的变量;在代码段{ }外,使用代码段外部定义的变量。

五、使用数组作为函数参数

将数组传入函数,不是将数组中的所有元素一起传入函数,而是将数组的第一个元素的地址传入函数。所以,从函数外部向函数内部传入数组时,内部和外部操作的是同一个数组。

语法:

如果需要将一个一维数组传入函数,需要定义两个参数:

函数类型 函数名(类型 参数名[ ], 元素个数)

六、其他

1、函数嵌套

允许函数嵌套使用,但是不允许函数嵌套定义,即在定义的一个函数内部定义另一个函数。

2、函数递归:在函数定义的过程中,调用函数本身

分为:有终止的递归、无终止(不允许)的递归

有终止的递归:即当满足某个条件时,结束调用函数本身。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值