为什么会报错啊?
#include<bits/stdc++.h>using namespace std;
char search(int m,const char a[],int i,int j,int n) //显示此处二维数组报错
{
int cnt = 0;
if(j-1 >= 0 && a == '*') cnt++;
if(j+1 <= m && a == '*') cnt++;
if(i-1 >= 0 && a == '*') cnt++;
if(i+1 <= n && a == '*') cnt++;
if(j-1 >= 0 && i-1 >= 0 && a == '*') cnt++;
if(j+1 <= m && i-1 >= 0 && a == '*') cnt++;
if(j-1 >= 0 && i+1 <= n && a == '*') cnt++;
if(j+1 <= m && i+1 <= n && a == '*') cnt++;
return cnt + '0';
}
int main()
{
int n,m;
cin >> n >> m;
char a;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
cin >> a;
}
}
char b;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
if(a == '*')
{
b == '*';
}
else if(a == '?')
{
b = search(m,&a,i,j,n);
}
}
}
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
cout << b;
}
cout << endl;
}
return 0;
} 二维数组 传参有好几种方式,但是没有你这种方式。。。。
这种写法的话,第二维必须是固定值。但是你的这个程序第二维不是固定值,那么就不能用这种方式写。
给你两种方式,第一种,在主函数中定义的时候就不用数组,直接用二维指针,那么传参直接使用二维指针即可,不用考虑第二维是否是固定值的问题;第二中,通过降维处理,传递一个地址过去,函数中用一维指针即可
第一种方式我就不帮你写了
第二种如下
#include<bits/stdc++.h>
using namespace std;
char search(int m, char *a,int i,int j,int n) //显示此处二维数组报错
{
int cnt = 0;
if(j-1 >= 0 && a == '*') cnt++;
if(j+1 <= m && a == '*') cnt++;
if(i-1 >= 0 && a[(i-1)*n+j] == '*') cnt++;
if(i+1 <= n && a[(i+1)*n+j] == '*') cnt++;
if(j-1 >= 0 && i-1 >= 0 && a[(i-1)*n+j-1] == '*') cnt++;
if(j+1 <= m && i-1 >= 0 && a[(i-1)*n+j+1] == '*') cnt++;
if(j-1 >= 0 && i+1 <= n && a[(i+1)*n+j-1] == '*') cnt++;
if(j+1 <= m && i+1 <= n && a[(i+1)*n+j+1] == '*') cnt++;
return cnt + '0';
}
int main()
{
int n,m;
cin >> n >> m;
char a;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
cin >> a;
}
}
char b;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
if(a == '*')
{
b == '*';
}
else if(a == '?')
{
b = search(m,&a,i,j,n);
}
}
}
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
cout << b;
}
cout << endl;
}
return 0;
}
页:
[1]