#include<stdio.h>
void cal(char **p,int m,int n);
int t=0;
int main(void)
{
int n,m;
int i,j;
char a[1001][101];
char *p1=a[0];
char **dui=&p1;
for(i=0;i<=1000;i++){
for(j=0;j<101;j++){
a[i][j]='0';
}
}
scanf("%d%d",&n,&m);
getchar();
for(i=1;i<n+1;i++){
for(j=1;j<=m;j++){
a[i][j]=getchar();
}
getchar();
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cal(dui,i,j);
}
}
printf("%d",t);
return 0;
}
void cal(char **p,int m,int n)
{
if(*(*(p+m)+n)=='0'){
;
}else{
int cnt=0;
if(*(*(p+m+1)+n)!='0'){
cal(p,m+1,n);
*(*(p+m+1)+n)='0';
}else{
cnt++;
}
if(*(*(p+m-1)+n)!='0'){
cal(p,m-1,n);
*(*(p+m-1)+n)='0';
}else{
cnt++;
}
if(*(*(p+m)+n+1)!='0'){
cal(p,m,n+1);
*(*(p+m)+n+1)='0';
}else{
cnt++;
}
if(*(*(p+m)+n-1)=='0'){
cal(p,m,n-1);
*(*(p+m)+n-1)='0';
}else{
cnt++;
}
if(cnt==4){
t++;
}
*(*(p+m)+n)='0';
}
}
运行结果是 return value 3221225477
应当是函数里的二级指针出现问题,应该怎样改正呢
这么传递是不行的。将参数改为 char (*p)[101],然后调用的时候传入a就可以了
另外这个递归里面也有问题,没有确保递归时m和n一定在有效范围,比如是否出现负数,因为有 n-1和m-1的操作。