函数的使用(2)

一、数组做函数的参数

        在使用函数解决问题的过程中,可能会使用到将数组作为参数传递给函数,数组作为参数就是在函数内部对数组进行设置

        例:写一个函数将一个整型数组里的内容,全部置为-1,再写一个函数将值打印出来

        如何写这样的函数呢?首先将数组作为参数传递给函数后,我们要继续思考:对数组的内容进行改正/打印,是不是需要知道数组的个数之后才能遍历数组?所以我们还需要一个参数就是数组的元素个数。因此函数有两个参数,一个是数组,一个是数组的元素个数      

        数组传参有几个重要的点:

1.函数的形参个数要和实参的个数相匹配

2.函数的实参是数组,形参也可以写成数组的形式

3.形参如果是一维数组,数组的大小可以省略不写

4.形参如果是二维数组,数组的行可以省略,列不能省略

5.数组传参,形参是不会创建新的数组的,形参操作的数组和实参是同一个数组

二、函数的声明和定义

2.1 单个文件

一般我们在使用函数的时候,直接写出来就可以使用了。就拿上面的代码进行举例

        函数的定义在函数调用前使用没有什么问题,但如果我们把函数调用放在函数定义之前有什么问题呢?

         编译报错了,这是为什么呢?

        这是因为C语言编译器对源代码进行编译的时候,是从第一行往下进行扫描的,当遇到函数调用的时候,并没有发现前面有函数的定义,就报出了上述的警告。

        怎么解决这个问题呢?就是在使用这个函数之前对函数进行声明一下,声明函数需要交代清楚:函数名,函数的返回类型和函数的参数。如:void set_arr(int arr[ ],int x) void printf_arr(int arr[ ],int y)

        函数的调用一定要先声明后使用。函数的定义也是一种特殊的声明,所以如果函数的定义放在函数调用之前也是可以的。

2.2 多个文件

        在写代码的时候,有时候代码比较多,我们不会把代码全部放在同一个文件中;往往会根据程序的功能,将代码才分在多个文件中。

        一般情况下,函数的声明、类型的声明放在头文件(.h)中,函数的实现是放在源文件(.c)中

三、static和extern

        staticextern都是C语言中的关键字。

        static静态的意思,可以用来修饰:

    局部变量

    全局变量

    函数

        extern是用来声明外部符号的

在介绍这两个关键字之前,我们先来了解一下:作用域和生命周期

        作用域是程序设计概念,通俗易懂地来说,一段程序代码所用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域

        局部变量的作用域是变量所在的局部范围(比如写一个函数,在函数内部创建一个变量,这个变量只能在函数内部使用;它的作用域就是这个函数,出了这个函数,创建的变量就没有意义了)

        全局变量的作用域是整个工程

        生命周期指的是变量的创建到变量销毁之间的一个时间段

        局部变量的生命周期是:进入作用域变量创建,生命周期开始,出作用域生命周期结束

        全局变量的生命周期是:整个程序的生命周期

3.1 static修饰局部变量

        对比一下代码1和代码2的效果:

        代码1的test( )函数中的局部变量i是每次进入函数先创建变量(生命周期开始),在赋值为0,然后++,在打印,出函数的时候变量生命周期结束(释放内存)

        代码2从打印的结果来看,i有累加的效果,test函数中的i出函数并不会被销毁,重新进入函数也不会重新创建变量,直接继续上次的累计效果进行计算

        结论static修饰局部变量改变了局部变量的生命周期。生命周期地改变本质上是改变了变量的存储类型。本来局部变量是存储在内存的栈区,但是被static修饰后存储到静态区,存储在静态区的变量和全局变量是一样的,生命周期和程序的生命周期一样,只有程序结束,变量才会销毁。但是作用域是不变的。

3.2 static修饰全局变量和extern作用

        extern是用来修饰外部符号的,如果全局变量在A文件中定义,但是想要在B文件中使用,就可以使用extern来进行声明使用

       代码1正常运行,代码2编译出现链接性错误

       结论:一个全局变量被static修饰,只能在本源文件中使用,不能在其他源文件内使用

3.3 static修饰函数

        代码1正常运行,代码2出现链接错误

        结论static修饰函数和修饰全局变量是一样的,一个函数在整个工程可以使用,但是被static修饰后,只能在本文件内使用,其他文件无法正常链接使用

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值