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]了?


米脂
浏览 1749回答 2
2回答

哆啦的时光机

数组,在函数里作为参数会退化为指针,所以变成&nbsp;&nbsp;int&nbsp;*&nbsp;map[10];这里不需要引用#include&nbsp;<iostream> using&nbsp;namespace&nbsp;std; void&nbsp;change2(int&nbsp;map[10][10]){ &nbsp;&nbsp;&nbsp;&nbsp;map[1][1]&nbsp;=&nbsp;234; &nbsp;&nbsp;&nbsp;&nbsp;return; } int&nbsp;main(){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;map[10][10]; &nbsp;&nbsp;&nbsp;&nbsp;map[1][1]&nbsp;=&nbsp;123; &nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;map[1][1]&nbsp;<<&nbsp;endl; &nbsp;&nbsp;&nbsp;&nbsp;change2(map); &nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;map[1][1]&nbsp;<<&nbsp;endl; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0; }change2可以改变数组。因为是按照地址传递的。

沧海一幻觉

抛开这道题来说,假设你来设计函数的机制,函数形参为一个数组,如果固定了这个数组的长度,就会导致函数适用性变差,对吧,所以,实际上在定义形参的时候,数组的最高维度可以不写,比如你的int map[10][10],实际上只是map[][10],也就是你说的( * map)[10],对于报错,你是想用引用吗?数组不需要引用,可以直接修改,因为实参传进去的实际是地址,地址并没有改变
打开App,查看更多内容
随时随地看视频慕课网APP