一维数组
参数传递方式
指针传递,但是传递的是实际参数数组首地址的副本,即实参和形参都指向数组首地址,但是是两个不同的指针,即两个指针自身在内存中不是同一个。
#include<iostream>
using namespace std;
void test(int a[]){
cout<<"数组首地址:"<<a<<endl;
cout<<"形式参数地址:"<<&a<<endl;
}
int main(){
int a[] = {1,2};
cout<<"数组首地址:"<<a<<endl;
cout<<"形式参数地址:"<<&a<<endl;
test(a);
}
结果
数组首地址:0x16dd232c0
形式参数地址:0x16dd232c0
数组首地址:0x16dd232c0
形式参数地址:0x16dd23288
数组名作为函数参数
第一种
类型 函数名(类型 形式参数数组名[])
第二种
类型 函数名(类型 形式参数数组名[], int 数组长度)
第三种
类型 函数名(类型 形式参数数组名[数组长度])
第四种
类型 函数名(类型* 形式参数数组名)
也就是说
- 形式参数可以是一个数组元素类型的指针
- 形式参数也可以写成声明数组的形式,并且可以指定数组长度,也可以不指定
- 调用函数时只需要将实际参数数组名传入即可
- 在函数的形参定义时,有没有长度无所谓,参数传递是以指针形式实现的,以数组名作函数参数时,实参数组与形参数组都不必定义长度,因此实参与形参的结合方式是地址结合,与数组长度无关。
二维数组
数组名作为函数参数
类型 函数名(类型 形式参数数组名 [m][n])
类型 函数名(类型 形式参数数组名 [][n])
- 二维或多维数组作为函数参数必须声明长度,最高维度的长度可以省略
- 函数调用时只需要将实际参数数组名传入即可