1.数组做函数参数
当数组传参时,需要注意
- 函数的形参要和函数的实参个数匹配
- 函数的实参是数组,形参也是可以写成数组形式的
- 形参如果是一维数组,数组大小可以忽略不写
- 形参如果是二维数组,行可以省略,但是列不能省略,即采用一维数组访问方式访问二维数组
- 数组传参,形参是不会创建新的数组的
- 形参操作的数组和实参的数组是同一个数组
2.链式访问
所谓链式访问就是将一个函数的返回值作为另一个函数的参数,像链条一样将函数串起来就是函数的链式访问。
#include<stdio.h>
int main()
{
printf("%d\n",strlen("123456")); //链式访问
return 0;
}
在了解过链式访问之后,看一下下面的代码执行结果为什么?
#include <stdio.h>
int main()
{
printf("%d",printf("%d",printf("%d",43)));
return 0;
}
<提示> printf()函数返回的是打印在屏幕上的字符的个数。
所以屏幕上最终打印:4321
5.函数的声明和定义
5.1单文件
一般我们在使用函数时,都是直接将函数写出来使用就使用了。
比如我们要写一个函数计算两数相加和
#include <stdio.h>
//函数的定义
int ADD(int a,int b)
{
return a+b;
}
int main()
{
int a=0,b=0;
scanf("%d %d",&a,&b);
int sum=ADD(a,b); //函数的使用
printf("%d",sum);
return 0;
}
函数的性质为先定义在使用,所以将函数的定义放在函数使用之后就会报错。
但如果在函数使用前加上一个申明交代清楚:函数名,函数返回类型和函数的参数。
#include <stdio.h>
//函数的声明
int ADD(int a,int b);
int main()
{
int a=0,b=0;
scanf("%d %d",&a,&b);
int sum=ADD(a,b); //函数的使用
printf("%d",sum);
return 0;
}
//函数的定义
int ADD(int a,int b)
{
return a+b;
}
这样代码就可以正常执行了。
5.2多文件
一般在企业中我们写代码时候,代码会比较多,不会将所有代码都放在一个文件中;我们往往会根据程序的功能,将代码拆分放在多个文件中。
一般情况下,函数的声明、类型的声明放在头文件(.h)中,函数的实现是放在源文件(.c)文件中。
将一个复杂的代码按照功能分成不同的模块去实现,好处是:
- 逻辑清晰
- 方便写作
- 方便代码的隐藏
1. 静态库(.lib)
在企业当中,时常会出现买卖代码实现模板的情况,而买卖代码时为了代码的隐秘性,卖家就会将源代码编译为静态库(.lib)进行售卖,同时为了保证买家可以看懂函数是怎么使用的,也会将源代码所伴随的头文件也发给买家。
注:静态库正常开始为乱码
将工程文件制作成静态库过程如下
设置完成后,ctrl+F5运行一下,在工程文件下就可找到了
5.3static和extern
static和extern 都是C语言中的关键字
static 是静态的意思,用于
- 修饰局部变量
- 修饰全局变量
- 修饰函数
extern 是用来修饰外部符号的
作用域: 程序设计概念,通常来说,一段程序代码中所用到的名字并不是总是有效(可用)的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围
- 全局变量的作用域是整个工程(项目)。
生命周期指的是变量的创建(申请内存)到变量销毁(收回内存)之间的一个时间段
- 局部变量的生命周期是:进入作用域变量创建,生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
5.3.1 static修饰局部变量
static修饰局部变量会改变变量的生命周期,生命周期改变的本质是改变了变量的存储类型,本来一个局部变量是存储在内存的栈区的,但是被static修饰后存储到了静态区。存储在静态区的变量和全局变量是一样的,生命周期就和程序的生命周期一样了,只有程序结束,变量才销毁,内存才收回。但是作用域是不变的。
使用建议:未来一个变量出了函数后,我们还想保留值,等下次进入函数继续使用,就可以使用static修饰。
5.3.2 static 修饰全局变量
extern 是用来声明外部符号的,如果一个全局的符号在A文件中定义的,在B文件中想使用,就可以使用extern <类型> 进行声明,然后使用。
代码前一个正常,后一个代码在编译的时候会出现链接性错误。
结论:
一个全局变量被static修饰,使得或者全局变量只能在本源文件内使用,不能在其他源文件内使用。
本质原因为 全局变量默认是具有外部链接属性的,在外部的文件中想使用,只要适当的外部声明就可以使用,但是全局变量被static 修饰后,外部链接属性就变成了内部链接属性,只能在自己所在的源文件内部使用了,其他源文件,即使声明了,也是无法正常使用的。
使用建议:如果一个全局变量,只想在所在的源文件内部使用,不想被其他文件发现,就可以使用static修饰。
5.3.3 static 修饰函数
static 修饰函数和全局变量是一样的,参考上面static修饰全局变量。