为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
米脂 2018-10-29 09:09:57
如题,下面是某个错误程序的简化,请问为什么在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]了?
查看完整描述

2 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

数组,在函数里作为参数会退化为指针,所以变成

  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可以改变数组。因为是按照地址传递的。


查看完整回答
反对 回复 2018-11-03
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

抛开这道题来说,假设你来设计函数的机制,函数形参为一个数组,如果固定了这个数组的长度,就会导致函数适用性变差,对吧,所以,实际上在定义形参的时候,数组的最高维度可以不写,比如你的int map[10][10],实际上只是map[][10],也就是你说的( * map)[10],

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


查看完整回答
反对 回复 2018-11-03
  • 2 回答
  • 0 关注
  • 1748 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信