传递多维数组会导致错误
Passing multidimensional arrays gives and error
我试图将多维数组传递给函数。当我尝试编译时,我得到一个错误,说
[Error] cannot convert 'int (*)[3]' to 'int (*)[2]' for argument '1' to 'void reve(int (*)[2], int)'
有什么问题吗?我做错了什么?下面是我写的代码:
#include <iostream>
using namespace std;
const int rows=2;
const int cols=2;
const int n = 3;
void reve(int arr[rows][cols],int n){
int br[3][3],i,j,k,l;
for(i=n-1,k=0;i>=0,k<n;i--,k++){
cout<<endl;
for(j=n-1,l=0;j>=0,l<n;j--,l++)
br[k][l]=arr[i][j];
}
for(i=0;i<n;i++){
for(j=0;j<n;j++)
arr[i][j]=br[i][j];
}
}
int main() {
int i,j,k,l,ar[3][3],br[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>ar[i][j];
int n=3;
reve(ar,n);
for(i=0;i<3;i++){
cout<<endl;
for(j=0;j<3;j++)
cout<<ar[i][j];
}
return 0;
}
在函数调用中使用二维数组时,它会衰减为指针类型。但是,除了第一个维度之外,所有维度都必须完全匹配。
如果函数的参数类型为int (*arg)[2]
,则不能使用声明为int var[3][3]
的变量来调用该函数。var
衰减为类型为int (*)[3]
的指针。
一开始让人困惑,因为它似乎在一维数组的情况下工作。
void foo(int arg[10])
{
}
int var[2];
foo(var); // OK
这是因为编译器忽略了数组第一个维度的大小。以上foo
的定义与:
void foo(int arg[])
{
}
和
void foo(int* arg)
{
}
但是,对于多维数组,除第一个维度外的所有维度的大小必须完全匹配。
reve()
函数期望一个数组[2][2],但你传递的是一个[3][3]数组。
main()
中的ar
数组被声明为int ar[3][3]
,而它应该是int ar[rows][cols]
您在内存中预留了2块。在循环中,从2到0得到3。做以下修改:
const int n= 2;
相关文章:
- "错误:数组下标的无效类型'float [10001][float]'是什么意思?
- 错误:数组下标的类型"const bool[int]"无效
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 使用GCC 4.8构建错误:数组用作初始化器
- 如何修复问题中的"teminated due to timeout"错误 数组操作 |黑客兰克?
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数
- 错误:数组的总大小不得超过0x7fffffff字节
- 错误:无法将参数“1”的“double*”转换为“double”,错误:数组下标的类型“double[double]”无
- 返回并强制转换数组指针(错误:数组下标的类型..无效)
- 返回c++中的字符错误数组
- VC++错误:数组实例化的大小来自模板化的静态常量
- c++mex错误:数组下标的类型“double[mwSize]”无效
- 错误数组用作初始值设定项,我不知道错误
- 编译错误 - 数组下标'char[int]'的类型无效
- 向量在我的类中.错误:数组new [-fpermissive]中的圆括号初始化项
- 错误:数组下标的类型无效
- 错误:数组new中的size必须是整型[-fpermissive]
- 错误:数组下标的“Pixel*[__complex__ int]”类型无效
- c++错误数组显示
- C++:错误:数组下标的类型“size_t{aka long unsigned int}[size_t{aka long