C语言二维数组函数形参实参类型匹配问题及解决方法
在C语言中,二维数组作为函数实参时,容易出现与形参类型不匹配的问题。
例如,以下代码中,被调函数max的函数原型为int max(int _p, int n1, int n2),而主调函数中的函数调用int k = max(*a, 3, 4)中的实参*a类型与被调函数的形参类型不匹配。
#include <stdio.h>
int max(int _p, int n1, int n2) {
int maxVal = _p[0];
for (int i = 1; i < n1 * n2; i++) {
if (_p[i] > maxVal) {
maxVal = _p[i];
}
}
return maxVal;
}
int main() {
int a[3][4] = {{1}, {5, 6}, {9, 10, 11}};
int k = max(*a, 3, 4);
printf("最大值:%d\n", k);
return 0;
}
由于a是一个二维数组,其类型为int[3][4],而*a的类型为int[4]。在函数调用中,*a将作为指针传递给形参_p,但形参_p的类型是int,而不是int[4]。
要使代码正确运行,需要将被调函数的形参类型修改为int* _p,以接受指向一维数组的指针。修改后的代码如下:
#include <stdio.h>
int max(int* _p, int n1, int n2) {
int maxVal = _p[0];
for (int i = 1; i < n1 * n2; i++) {
if (_p[i] > maxVal) {
maxVal = _p[i];
}
}
return maxVal;
}
int main() {
int a[3][4] = {{1}, {5, 6}, {9, 10, 11}};
int k = max(*a, 3, 4);
printf("最大值:%d\n", k);
return 0;
}
在修改后的代码中,被调函数max的形参类型改为int* _p,以接受指向一维数组的指针。通过对一维数组的指针进行遍历和比较,找到最大值并返回。主调函数中的调用int k = max(*a, 3, 4)将会传递a的首元素的地址给形参_p。
当你运行修改后的代码时,将输出矩阵中的最大值。
原文地址: http://www.cveoy.top/t/topic/bBKH 著作权归作者所有。请勿转载和采集!