ed *_*ale -2 c++ arrays 2d function
我试图将2d数组传递给函数但编译器显示错误:
错误:无法转换int (*)[5]到int**的参数1来int max_size(int**, int, int)
我知道这个理论但却无法弄清楚它为什么不起作用.
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define r 6
#define c 5
using namespace std;
int max_size(int *g[],int m,int n)
{
// Initial Structure for DP
int i,j;
int **s = (int **) malloc (r*sizeof(int *));
for(i=0;i<r;i++)
s[i]=(int *)malloc(c*sizeof(int));
memset(s,0,sizeof(s));
// Initialization for DP
for(i=0;i<r;i++)
s[i][0] = g[i][0];
for(i=0;i<c;i++)
s[0][i] = g[0][i];
// Formulation for DP
for(i=1;i<r;i++)
{
for(j=1;j<c;j++)
{
if(g[i][j])
s[i][j]= min(s[i-1][j],s[i-1][j-1],s[i][j-1])+1;
else
s[i][j]=0;
}
}
int c = 0;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if(s[i][j]>c) c=s[i][j];
}
}
return c;
}
int main()
{
int m[r][c] = {{1,0,1,1,1},{1,1,1,0,0},{1,0,0,0,1},{1,1,0,0,0},{1,0,0,0,1}};
cout<<max_size(m,r,c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您正在尝试将2D数组作为类型的参数传递int**.这种转换是不可能的,因为它们将具有根本不同的结构.
2D数组(例如3x3)在内存中看起来像这样:
0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2
???????????????????????????????????????????????????????
? int ? int ? int ? int ? int ? int ? int ? int ? int ?
???????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
甲int**使用时作为一种2D阵列的(其中,最外面的指针指向在指针数组的第一个元素,并且每个这些点,以整数数组的第一个元素的)如下所示:
???????
? ? // The int**
???????
?
?
??????????????
? ? ? // An array of int*
??????????????
? ????????????
? ?
?????????????? ??????????????
? int ? int ? ? int ? int ? // Arrays of ints
?????????????? ??????????????
0,0 0,1 1,0 1,1
Run Code Online (Sandbox Code Playgroud)
但是,类型的2D数组int[x][y]可以转换为类型int(*)[y](这通常称为数组到指针转换),因此您可以像这样编写函数:
int max_size(int (*g)[c],int m,int n);
Run Code Online (Sandbox Code Playgroud)
或者可以用一些语法糖来编写,如下所示:
int max_size(int g[][c],int m,int n);
Run Code Online (Sandbox Code Playgroud)
数组类型的参数(像这一个)被转换为指针 - 也就是说,[]根本就没有说"数组".实际上,您可以在这些括号中放置一个大小,但它将被完全忽略.
| 归档时间: |
|
| 查看次数: |
1284 次 |
| 最近记录: |