如题,下面是某个错误程序的简化,请问为什么在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可以改变数组。因为是按照地址传递的。
沧海一幻觉
TA贡献1824条经验 获得超5个赞
抛开这道题来说,假设你来设计函数的机制,函数形参为一个数组,如果固定了这个数组的长度,就会导致函数适用性变差,对吧,所以,实际上在定义形参的时候,数组的最高维度可以不写,比如你的int map[10][10],实际上只是map[][10],也就是你说的( * map)[10],
对于报错,你是想用引用吗?数组不需要引用,可以直接修改,因为实参传进去的实际是地址,地址并没有改变
- 2 回答
- 0 关注
- 1748 浏览
添加回答
举报
0/150
提交
取消