C⼀C++高手进来噻。。问题请教~~

2024-12-18 00:01:42
推荐回答(5个)
回答1:

指针P没有初始化,你将它的解引用赋值是不可预知的,因为P很有可能指向不可访问的地址

#include
#define M 3
#define N 2
int main()
{
int *max(int m,int n,int *p4);
int b[M][N],i,j;
int *p3,*p4;
for(i=0;i for(j=0;j scanf("%d",&b[i][j]);
p4=*b;
p3=max(M,N,p4);
printf("max is %d",*p3);
printf(" Col is %d",*(p3+1)+1);
printf(" Row is %d",*(p3+2)+1);
return 0;
}
int *max(int m,int n,int *p4)
{
int *p = new int,*p2,maxn,i,j;
p2=p4;
maxn=*p2;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
if(maxn<=*(p2+i*n+j))
{
maxn=*(p2+i*n+j);
*p=maxn;
*(p+1)=i;
*(p+2)=j;
}
return(p);
}

回答2:

#include
#define M 3
#define N 2

int max(int& row,int& col,int (*pa)[N])
{
int maxi,i,j;
maxi = pa[row][col];
for(i=0;ifor(j=0;jif(maxi < pa[i][j])
{
maxi = pa[i][j];
row = i;
col = j;
}
return maxi;
}

int main()
{
int r,c,m;
r = c = 0;
int b[M][N],i,j;
for(i=0;ifor(j=0;jscanf("%d",&b[i][j]);
m = max(r,c,b);
printf("\nmax is %d",m);
printf(" \nCol is %d",r);
printf(" \nRow is %d",c);
return 0;
}

回答3:

p没有初始化,他是一个垃圾值,如果碰巧他指向的地址是可访问的,p*=maxn可用工作,并且放回给main函数也勉强可以工作。但是这是很危险的。

如果不用new 来分配内存给p的话,你也可以用int **p作为一个参数传递给max来,当作返回值来使用。如下:

#include
#define M 3
#define N 2
int main()
{
int *max(int m,int n,int *p4);
int b[M][N],i,j;
int *p3,*p4;
for(i=0;ifor(j=0;jscanf("%d",&b[i][j]);
p4=*b;
max(&p3, M,N,p4);
printf("max is %d",*p3);
printf(" Col is %d",*(p3+1)+1);
printf(" Row is %d",*(p3+2)+1);
return 0;
}

void max(int **p, int m, int n, int *p4)
{
int *p2, maxn,i,j;
p2=p4;
maxn=*p2;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
if(maxn<=*(p2+i*n+j))
{
maxn=*(p2+i*n+j);
*p=maxn;
*(p+1)=i;
*(p+2)=j;
}
return;
}

回答4:

把int改成long
ANSI中int可以介于short和long之间

p4=*b; 这句有问题吧

回答5:

VC不是标准C
对数据类型的值范围做了修改