1.定义与声明的区别
定义:从无到有把函数创建出来;
声明:说明有这个函数,一般是函数在主函数后面时,在主函数中调用时使用。
2.传参
1.传参不是同步进行的,默认情况下为从右到左,如下
先传参数j,再传参数i
输出:20 10 30
2.值传
只把实参的值传给函数形参,形参时实参的复制品,两者都有自己的存储空间,形参无法改变实参,即无法在被调函数中修改主调。
调用函数时,临时给形参开空间,复制实参的值,然后运行函数,调用结束时销毁形参的存储空间,从始至终实参没有改变。如以下,输出10
以下,输出10,20
但指针传参的形参可以修改实参,形参不是复制实参的值,而是存储实参的地址。
函数调用时,不要对实参编写(函数名(i,++i))进行自增或自减操作,因为不同系统值不一样。
3
正在运行的程序叫进程;
流水线结构:pc寄存器取当前执行的下一行代码地址,cpu执行代码
调用函数:pc读取到时跳转到调用函数的入口地址(首行代码地址),执行完后再跳转回来,即恢复现场;
跳转时会有专门的内存空间保存跳转时所在的主函数位置的地址,即保护现场;
此处专门的内存空间为栈区,栈结构特点为先进后出,后进先出,保存再栈区的数据有:1.函数定义的局部变量;2.函数形参;3.函数返回的位置。栈区是有大小的,再Linux系统下不超过8Mb,Windows不超1Mb
除此之外,还有堆区、字符串常量区、静态区(全局区)、代码区
4.递归
下例不会引发死循环,但栈区会填满,引发程序崩溃
实例1+2+...+100
先找出不循环的条件 if(1 == n)
递归并不比循环有效率,能不用就不用
5.数组作为函数参数
要传两个参数,数组和长度(函数名(a[], int len)),数组作为函数参数,是指针传参。
const char*dest 既可以传字符数组名,也可以传字符串常量;若没有const则只能传数组名。
二维数组作参数,列数必需定死为固定值。
数组遍历
字符数组遍历
二维数组遍历
二维字符数组遍历