#include<stdio.h>
int findMax(int **a,int m,int n)
{
int max,i,j;
max=a[0][0];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(max<a[i][j])
max=a[i][j];
return max;
}
int main()
{
int a[20][20],m,n,i,j,maxim;
scanf("%d",&m); //Rows
scanf("%d",&n); //Cols
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
maxim=findMax((int **)a,m,n);
printf("Max is %d\n",maxim);
return 0;
}
上面的代码必须在输入矩阵中给出最大元素。
问题
编译代码时,我没有收到任何错误或警告,但在执行期间代码在输入后停止运行。!
问题陈述说必须使用 int findMax(int ** a,int m,int n)。
答案 0 :(得分:4)
2D数组不会衰减为指向指针的指针。使用:
maxim=findMax((int **)a,m,n);
你强迫编译器忽略你的错误。
而不是
int findMax(int **a,int m,int n)
使用
int findMax(int a[][20],int m,int n)
然后,只需使用:
调用该函数 maxim=findMax(a,m,n);
你说:
问题陈述说必须使用 int findMax(int ** a,int m,int n)。
在这种情况下,您无法将{2}数组用于a
。你必须使用:
int main()
{
// Define a to be an array of pointers.
int* a[20];
int m,n,i,j,maxim;
scanf("%d",&m); //Rows
// Make sure m not greater than 20. Otherwise, you'll end up
// accessing memory out of bounds.
if ( m > 20 )
{
// Deal with error.
}
scanf("%d",&n); //Cols
for(i=0;i<m;i++)
{
a[i] = malloc(sizeof(int)*n);
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
maxim=findMax(a,m,n);
printf("Max is %d\n",maxim);
// Deallocate memory.
for(i=0;i<m;i++)
{
free(a[i]);
}
return 0;
}
答案 1 :(得分:1)
int findMax(int **a,int m,int n)
应该是
int findMax(int a[][20],int m,int n)
检查以下代码。通过使a
指向指针,您就可以使用API的原型
int main()
{
int **a,m,n,i,j,maxim;
scanf("%d",&m); //Rows
scanf("%d",&n); //Cols
a = malloc(sizeof(int *) * m);
for(i=0;i<m;i++)
{
a[i] = malloc(sizeof(int) * n);
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
maxim=findMax((int **)a,m,n);
printf("Max is %d\n",maxim);
return 0;
}
答案 2 :(得分:1)
而不是int a[20][20]
,请使用int **a
并分配其空间。
int a1[20][20]
将a1
声明为int
的数组20的数组20
int **a2
将a2
声明为指向int
的指针
@Ref
a1
是int
的二维数组
a2
是指针数组。 a2[i]
指向int
(或int
数组中的第一个)
这两种类型相似,但不兼容。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int m, n, i, j, maxim;
int **a;
scanf("%d", &m); //Rows
scanf("%d", &n); //Cols
a = calloc(m, sizeof *a);
if (a == NULL)
return EXIT_FAILURE;
for (i = 0; i < m; i++) {
a[i] = calloc(n, sizeof *a[i]);
if (a[i] == NULL)
return EXIT_FAILURE;
for (j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
maxim = findMax(a, m, n);
printf("Max is %d\n", maxim);
for (i = 0; i < m; i++) {
free(a[i]);
}
free(a);
return 0;
}