普罗格瑞木 2019-12-17 15:19 采纳率: 0%
浏览 198

关于c语言的二维数组传递的问题求解决~

我遇到的问题是:在主函数中声明的二维数组
( int mi;)
传递到函数createmaze(int **mi)以及
find(int **mi)中报错:
cannot convert 'int (*)[(c + 1)]' to 'int
' for argument '2' to 'int createmaze(maze**, int**, SqStack&)'
百度上介绍的办法都试过了,没用。使用的dev C++。
所以在此请求大佬支援!!!
相关代码:
int find(maze **ma,int **mi,SqStack &S,poi e){
int err;
push(S,e);/*先将开始处位置压栈*/
while(1){/*模拟用户寻找出口*/
if(mi[e.a+1][e.b]==1&&ma[e.a+1][e.b].foot==0&&ma[e.a+1][e.b].death==0){ /*向下找*/
e.a++;
e.step++; /*表示走了n步*/
ma[e.a+1][e.b].foot++;/*表示第一步已走过*/
push(S,e);
return 1; /*返回while再来*/
}
else if(mi[e.a][e.b+1]==1&&ma[e.a][e.b+1].foot==0&&ma[e.a][e.b+1].death==0){ /*向右找*/

e.b++;
e.step++;
ma[e.a][e.b+1].foot++;
push(S,e);
return 1;
}
else if(mi[e.a-1][e.b]==1&&ma[e.a-1][e.b].foot==0&&ma[e.a-1][e.b].death==0){ /*向上找*/
e.a--;
e.step++;
ma[e.a-1][e.b].foot++;
push(S,e);
return 1;
}
else if(mi[e.a][e.b-1]==1&&ma[e.a][e.b-1].foot==0&&ma[e.a][e.b-1].death==0){/*向左找*/
e.b--;
e.step++;
ma[e.a][e.b-1].foot++;
push(S,e);
return 1;
}
else if(e.a==r&&e.b==c)/*已经到达出口*/err==0;
else{/*未找到路,返回*/ /*death表明死路,不会再去。*/
if(mi[e.a][e.b-1]==1){ /*回左边*/
ma[e.a][e.b].death=1;
e.b--;
e.step--;
ma[e.a][e.b-1].foot--;
pop(S,e);
return 1;
}
else if(mi[e.a-1][e.b]==1&&ma[e.a-1][e.b].foot==0){ /*回上*/
ma[e.a][e.b].death=1;
e.a--;
e.step--;
ma[e.a-1][e.b].foot--;
pop(S,e);
return 1;
}
else if(mi[e.a][e.b+1]==1&&ma[e.a][e.b+1].foot==0){ /*回右*/

ma[e.a][e.b].death=1;
e.b++;
e.step--;
ma[e.a][e.b+1].foot--;
pop(S,e);
return 1;
}
else if(mi[e.a][e.b+1]==1&&ma[e.a][e.b+1].foot==0){ /*回下*/

ma[e.a][e.b].death=1;
e.a++;
e.step--;
ma[e.a][e.b+1].foot--;
pop(S,e);
return 1;
}
}
}
if(err==-1) return -1;
else return 0;
}
int createmaze(maze **ma,int **mi,SqStack& S){/*创建具有出路的迷宫*/
for(int i=0;i<r+2;i++){/*建立迷宫外围i行j列*/ /*foot指已走过的次数:在这循环使之置0或墙的3.*/
for(int j=0;j<c+2;j++){

int R = rand()%2;
if(i==0){ /*第一行*/
mi[i][j]=0;
ma[i][j].foot=3;/*外墙在数组中的foot置3避免错误*/
ma[i][j].death=3;
if(j==0||j==c+1) printf("口");
else printf("—");
}
else if(i!=0&&i!=r+1){ /*中间行*/
if(j==0||j==c+1){
mi[i][j]=0;
ma[i][j].foot=3;
ma[i][j].death=3; /*中间行的外墙在数组中置0*/
printf("||");
}
else if(R==0){/*剔除出口与入口后的内墙的建立*/
if(i==1&&j==1){
mi[i][j]=1;
ma[i][j].foot=0; /*入口在数组中置1*/
ma[i][j].death=0;
printf(" ");
}
else if(i==r&&j==c){
mi[i][j]=1;
ma[i][j].foot=0; /*出口在数组中置1*/
ma[i][j].death=0;
printf(" ");
}
else{
ma[i][j].foot=3;
mi[i][j]=0; /*内墙在数组中置0*/
ma[i][j].death=3;
printf("口");
}
}
else{
mi[i][j]=1;
ma[i][j].foot=0; /*其他地方置1*/
ma[i][j].death=0;
printf(" ");
}
}
else if(i==r+1){/*最底下的墙*/
mi[i][j]=0; /*底行外墙置0*/
ma[i][j].foot=3;

ma[i][j].death=3;

if(j==0||j==c+1)printf("口");
else printf("—");
}
if(j==c+1) printf("\n");
}
return 0;
}
printf("这是数组中的排列:\n");
for(int i=0;i<r+2;i++){
for(int j=0;j<c+2;j++){
printf("%d",mi[i][j]);
if(j==c+1) printf("\n");
}
}
}

int main(){

maze ma;//声明一个迷宫
ma=(maze
)malloc(r*sizeof(maze*));
for(int i=0;i<r+2;i++){
ma[i]=(maze*)malloc(c*sizeof(maze));
}
int mi[r+1][c+1];
createmaze(ma,mi,S);
if(find(ma,mi,S,e1)==-1) createmaze(ma,mi,S);/*再创建*/
return 0;
}

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?