【发布时间】:2021-01-22 06:41:29
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int findMax(int **a, int m, int n)
{
int max=**a;
int i,j;
for (i=0;i<m;i++){
for (j=0;j<n;j++){
if (*(*(a+i)+j)>max){
max=*(*(a+i)+j);
}
}
}
return max;
}
int main()
{ int r,c;
printf ("Enter the number of rows in the matrix\n");
scanf (" %d",&r);
printf ("Enter the number of columns in the matrix\n");
scanf (" %d",&c);
printf ("Enter the elements in the matrix\n");
int **a=(int **) malloc (c*sizeof(int *));
int i,j;
for (i=0;i<c;i++){
*(a+i)=(int *) malloc (r*sizeof (int));
}
for (i=0;i<r;i++){
for (j=0;j<c;j++){
scanf (" %d",(*(a+i)+j));
}
}
printf ("The matrix is\n");
for (i=0;i<r;i++){
for (j=0;j<c;j++){
printf ("%d ",(*(*(a+i)+j)));
}
printf ("\n");
}
printf ("The maximum element in the matrix is %d",findMax(a,r,c));
return 0;
}
我尝试编写代码来查找矩阵中的最大元素
如果我们输入 3 作为行和 2 作为列,则会出现分段错误。也就是写了5个输入之后就突然结束了。
示例输入:
输入矩阵的行数
3
输入矩阵的列数
2
输入矩阵中的元素
2
4
1
3
5
9
此输入失败。 任何帮助将不胜感激。
【问题讨论】:
-
注意不要混淆
r和c,您似乎已经这样做了。 -
另外,请记住,对于 any 指针或数组
p和索引i,表达式*(p + i)完全正确 等于p[i]。后者通常更容易阅读和理解(因此更容易维护),尤其是当涉及到像你这样的锯齿状数组时。也少写了。 -
关于可读性的例子,想想例如
*(*(a+i)+j)并将其与a[i][j]进行比较。你更喜欢读哪个?哪个更容易一目了然? -
对不起@Someprogrammerdude 但编码平台不允许我使用下标运算符并要求我只使用指针,因为它们正在测试指针的知识。
-
a[i][j]是使用指针。告诉你的老师读这个:Do pointers support “array style indexing”?