用指针作形参处理二维数组:主函数完成二维数组的输入,调用子函数查找二维数组元素中的最大值,并在主函数中输出该最大值。其中,子函数原型为:int f1(int *,int,int)
时间: 2023-12-03 21:46:46 浏览: 108
下面是一个例子,演示如何用指针作形参处理二维数组,并在子函数中查找二维数组元素中的最大值。
```c
#include <stdio.h>
int f1(int *a, int m, int n);
int main() {
int m, n, i, j;
printf("请输入二维数组的行数和列数:");
scanf("%d%d", &m, &n);
int a[m][n];
printf("请输入二维数组的元素:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
int max = f1(&a[0][0], m, n);
printf("二维数组中的最大值为:%d\n", max);
return 0;
}
int f1(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 * n + j) > max) {
max = *(a + i * n + j);
}
}
}
return max;
}
```
在主函数中,我们定义了一个二维数组 `a`,并且通过指针 `&a[0][0]` 把它作为实参传递给了子函数 `f1`。在子函数中,我们用指针访问了二维数组中的每一个元素,并且通过比较找到了最大值。
需要注意的是,在子函数中,我们使用 `*(a + i * n + j)` 来访问二维数组中的元素。这里的 `a` 是一个指向整型的指针,它指向了二维数组的第一个元素。因为二维数组在内存中是按行存储的,所以我们可以通过 `i * n + j` 的方式来计算出某个元素在一维数组中的位置。
阅读全文