
上QQ阅读APP看书,第一时间看更新
9.3.3 数组名作为函数参数
前面已经说过,数组名代表的是数组的首地址,所以,可以想象,数组名作为函数参数,传递到函数里面去之后,就相当于可以直接操纵这个数组了。
在函数章节中,曾经讲过数组名作为函数参数,那时候重点强调了下面这句话:将数组名作为函数参数时,就不是“值传递”的概念了,不再是单向传递,而是把实参数组的开始地址(首地址)传递给了形参,这就相当于实参和形参代表了同一段内存单元,这其实叫地址传递,也就是说,形参数组中各个元素的值如果发生了改变,就等价于实参数组中对应元素的值发生了改变。
这里可以做个归纳:如果有一个实参数组,想在函数中改变此数组中元素的值,实参与形参的对应关系可以有如下4种。
(1)实参和形参都用数组名。

总结:a是实参,代表数组的首地址,那么ba是形参,a和ba指向同一段内存,也就是说,在调用changevalue期间,a和ba指的是同一个数组,那么修改数组ba元素的值就等价于修改数组a元素的值。
(2)实参用数组名,形参用指针变量。

(3)实参和形参都用指针变量(这个其实和上一个很类似)。

(4)实参为指针,形参为数组名。把指针传递给数组名,那这个数组名也就相当于这个数组的首地址了(也就相当于ba数组和a数组共用同一段内存),不过这种用法比较少。换一种理解方式,这个ba数组名也可以看成一个指针,一个指向数组a的首地址的指针。
