c++ 二维数组在子函数里的引用

如题,下面是某个错误程序的简化,请问为什么在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],

对于报错,你是想用引用吗?数组不需要引用,可以直接修改,因为实参传进去的实际是地址,地址并没有改变