值传递、地址传递
廖家龙 用心听,不照做

值传递:当函数参数的类型是int、float、double、char类型的时候,调用者传入一个实参变量,函数执行完毕之后,对实参变量的值没有影响

我们来分析下面一段代码:为啥test函数和main函数中num的值不一样呢??

程序执行原理:

地址传递:数组作为函数的参数时是地址传递,在传值的时候,是把实参数组名传递进来,数组名代表数组地址,所以这个时候传值传的是数组的地址,把数组的地址传递给了函数的参数,所以函数的参数也指向了实参数组【当数组作为函数的参数的时候,在函数的内部去修改这个参数数组的元素,其实修改的就是实参数组的元素】

当数组作为函数的参数的时候,那么在传递的时候,会丢失数组的长度,在函数的内部使用sizeof计算参数数组的字节数,得到的永远都是8

内部原理:如果函数的参数是一个数组,在声明这个参数的时候,并不会去真正的创建数组,而是去声明一个用来存储数组地址的指针变量,这个指针变量在内存中占据8个字节

那我们函数内部想要得到原来的数组长度该怎么办呢??

如果我们的函数的参数是一个数组,这个时候还必须得加一个参数,让调用者将这个数组的长度传递进来

如果我们为函数写了一个数组作为参数,其实编译器在编译的时候,已经把这个数组换成了指针【所以,以后为函数写一个数组参数的时候,不要写数组了,直接按照下图写一个指针】