#include<iostream>
using namespace std;
void Out1(int* arr) {
cout << arr[0] << endl;
}
void Out2(int* arr[]) {
cout << arr[0] << endl;
}
void Out3(int arr) {
cout << arr[0] << endl; //此时把int当做数组使用,错误
}
void Out4(int arr[]) { //int形容数组内元素的属性
cout << arr[0] << endl;
}
int main() {
int arr[5] = { 1,2,3,4,5 };
//数组做函数形参的问题
//有 function(int * arr)(int * arr[])(int arr)(int arr[])
Out1(arr);//形参为指针,数组名arr也为指针,正确
Out2(arr);//该函数的形参为int**(int* + arr[] = 俩指针),现传入的arr为int*,错误
Out3(arr);//形参为int,传入int*,错误
Out4(arr);//形参为arr首地址,传入亦为数组首地址,正确
}
以上代码中,定义数组作为实参的函数,仅有Out1和Out4正确,其定义方式和参数传入方式可行。其余两种(Out2和Out3)均在数据类型上出错。
上述可行的两种定义方案中,因为形参均为数组指针,故数组内元素在函数中被赋值、修改,即内存地址中的数据被修改,函数运行结束后,该修改依然生效。
使用的编译器:VS2019