如题,下面是某个错误程序的简化,请问为什么在change2(map)那里报错了;
vs里说:
error C2664: “change2”: 不能将参数 1 从“int [][10]”转换为“int (&)[10][10]”
#include<iostream>
using namespace std;
void change2(int (&map)[10][10]){
return;
}
void change1(int map[10][10]){
change2(map);
return;
}
int main(){
int map[10][10];
change1(map);
return 0;
}
And为什么在change1里面map的类型变成int (*map)[10]了?
数组,在函数里作为参数会退化为指针,所以变成
int * map[10];
这里不需要引用
#include <iostream>
using namespace std;
void change2(int map[10][10]){
map[1][1] = 234;
return;
}
int main(){
int map[10][10];
map[1][1] = 123;
cout << map[1][1] << endl;
change2(map);
cout << map[1][1] << endl;
return 0;
}
change2可以改变数组。因为是按照地址传递的。
抛开这道题来说,假设你来设计函数的机制,函数形参为一个数组,如果固定了这个数组的长度,就会导致函数适用性变差,对吧,所以,实际上在定义形参的时候,数组的最高维度可以不写,比如你的int map[10][10],实际上只是map[][10],也就是你说的( * map)[10],
对于报错,你是想用引用吗?数组不需要引用,可以直接修改,因为实参传进去的实际是地址,地址并没有改变