一、函数(下)
(接上个总结函数部分)
1.数组作为函数来传参
#比如我们写个函数将一个数组中的内容全部变成“-1”再写一个函数打印
对于传参部分,如果是二维数组,则要写
set_arr(arr,3,5);//数组名。行,列
对于函数部分,若果你写的是二维数组,我们要这么来接收
void set_arr(int arr[][],int r,int c
##形参和实参个数要匹配,如果你的实参为数组那你形参也要是数组,形参数组的大小不写但是二维数组列要写(二维数组写法),传参时实参和形参是同一个数组且形参并不会自己创建一个数组(这个和变量不一样)
2.嵌套使用
#意思是把多个函数结合在一起,一环套一环,比如你要计算某年某月有多少天?如果是闰年呢?
3.链式访问
#意思是将一个函数返回值作为另一个函数参数,比如
printf("%zd\n",strlen("abcdef"));//可用%zu打印
//因为strlen对于size_t返回值,可以用无符号整数接收
又或者经典三重printf
printf("%d", printf("%d", printf("%d", 43)));//结果是4321
通过查询我们得知printf返回值是打印在屏幕上的元素个数
最里面一层的printf打印43,外一层就认为有两元素,返回2,最外面一层看到有一个元素,返回一
如果加上空格呢?没错,空格也算一个元素
printf("%d ", printf("%d ", printf("%d ", 43)));//结果就是43 3 2
二、函数的声明和定义
1.单个文件:若函数写在main函数之后,会出现警告,我们直接声明就好了
2.对于多个文件,代码我们拆分到多个文件中,声明放在头文件中,函数定义放在另一个.c文件中,引用是在使用 inlcude "头文件",不推荐不写头文件后用extern
你肯定纳闷为啥要这么做,我们将设个场景,若果你只想然别人使用不想让别人看到代码实现细节,可以把定义所在的文件,点击项目名→属性→常规→配置类型→换成静态库→再生成对应解决方案,包含对于头文件→有个.lib文件,把.lib文件和.h文件发个别人即可
三、static与extern(关键字)
1.对于extern,是用来声明外部符号的,可以是变量或者是函数等
2.作用域:变量的可使用范围就是其作用域,全局变量作用域是整个工程,在工程内跨文件也可以
3.生命周期:变量从创建到销毁时间段,局部变量进入作用域开始,出作用域结束,全局变量是整个程序的生命周期,也是main函数的生命周期
4.static
修饰局部变量→创建好后就不销毁,每次进出作用域保留上次的值
#原理:将局部变量由栈区放置到静态区,在内存中位置发生了变化
修饰全局变量→原本具有外部链接属性变成内部链接属性,仅当前文件可用,其他源文件无法使用
修饰函数→和全局变量类似,函数默认的外部链接属性变成内部连接属性,只能自己文件使用
END