函数郭蓉你好

第6讲:
函数
⽬录
1. 函数的概念
2. 库函数
3. ⾃定义函数
4. 形参和实参
5. return语句
6. 数组做函数参数
7. 嵌套调⽤和链式访问
8. 函数的声明和定义
1. 函数的概念
C语⾔中的函数就是⼀个完成某项特定的任务的⼀⼩段代码。⼦程序
在C语⾔中我们⼀般会⻅到两类函数:
库函数
⾃定义函数
2. 库函数
2.1 标准库和头⽂件
C语⾔并不提供库函数;C语⾔的国际标准ANSI C规定了⼀
些常⽤的函数的标准,被称为标准库
3. ⾃定义函数
3.1 函数的语法形式
其实⾃定义函数和库函数是⼀样的,形式如下:
ret_type fun_name ( 形式参数 )
{
}
1
2
3
4
ret_type 是函数返回类型
fun_name 是函数名
括号中放的是形式参数
{}括起来的是函数体
4. 形参和实参
4.1 实参
传递给函数的参数称为实际参数,简称实参。
4.2 形参
在函数名 后的括号中写的 x y ,称为形式参数,简
称形参。
4.3 实参和形参的关系
虽然我们提到了实参是传递给形参的,他们之间是有联系的,但是形参和实参各⾃是独⽴的内存空
间。
5. return 语句
在函数的设计中,函数中经常会出现return语句,这⾥讲⼀下return语句使⽤的注意事项。
return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执⾏表达式,再返回表达式
的结果。
return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。
return返回的值和函数返回类型不⼀致,系统会⾃动将返回的值隐式转换为函数的返回类型。
return语句执⾏后,函数就彻底返回,后边的代码不再执⾏。
如果函数中存在if等分⽀的语句,则要保证每种情况下都有return返回,否则会出现编译错误。
6. 数组做函数参数
#include int main()
{ int arr[] = {1,2,3,4,5,6,7,8,9,10};
int sz = sizeof(arr)/sizeof(arr[0]);
set_arr(arr, sz);
//设置数组内容为-1
print_arr(arr, sz);
//打印数组内容 return 0; }
• 函数的形式参数要和函数的实参个数匹配
• 函数的实参是数组,形参也是可以写成数组形式的 
• 形参如果是⼀维数组,数组⼤⼩可以省略不写
• 形参如果是⼆维数组,⾏可以省略,但是列不能省略
• 数组传参,形参是不会创建新的数组的
• 形参操作的数组和实参的数组是同⼀个数组 根据上述的信息,我们就可以实现这两个函数:
void set_arr(int arr[], int sz)
{
  int i = 0;
  for(i=0; i<sz;i++)
  {
    arr[i]=-1;
  }
}
void print_arr(int arr[], int sz)
{
   int i = 0;
  for(i=0; i<sz;i++)
   {
   printf("%d ", arr[i]);
   }
   printf("\n");
}
7. 嵌套调⽤和链式访问
8. 函数的声明和定义
8.1单个⽂件
8.2多个⽂件
函数的声明、类型的声明放在头⽂件(.h)中,函数的实现是放在源⽂件(.c)⽂件中。
8.3static和extern

static是静态的的意思,可以⽤来:

•修饰局部变量

•修饰全局变量

•修饰函数

extern是⽤来声明外部符号的。

作⽤域(scope)是程序设计概念,通常来说,⼀段程序代码中所⽤到的名字并不总是有效(可⽤)的,⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域
1.局部变量的作⽤域是变量所在的局部范围。
2.全局变量的作⽤域是整个⼯程(项⽬)。

⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。

1.局部变量的⽣命周期是:进⼊作⽤域变量创建,⽣命周期开始,出作⽤域⽣命周期结束。

2.全局变量的⽣命周期是:整个程序的⽣命周期。

8.3.1 static修饰局部变量:
结论:static修饰局部变量改变了变量的⽣命周期,⽣命周期改变的本质是改变了变量的存储类型,本来⼀个局部变量是存储在内存的栈区的,但是被static修饰后存储到了静态区。存储在静态区的变量和全局变量是⼀样的,⽣命周期就和程序的⽣命周期⼀样了,只有程序结束,变量才销毁,内存才回收。但是作⽤域不变的。
8.3.2 static修饰全局变量

结论:

⼀个全局变量被static修饰,使得这个全局变量只能在本源⽂件内使⽤,不能在其他源⽂件内使⽤。

8.3.3 static修饰函数
实static
修饰函数和static修饰全局变量是⼀模⼀样的,⼀个函数在整个⼯程都可以使⽤,被static修饰后,只能在本⽂件内部使⽤,其他⽂件⽆法正常的链接使⽤了。
extern是⽤来声明外部符号的,如果⼀个全局的符号在A⽂件中定义的,在B⽂件中想使⽤,就可以使⽤extern进⾏声明,然后使⽤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值