【发布时间】:2020-06-04 17:59:00
【问题描述】:
我在 google 上对此进行了一些搜索,发现它们没有任何区别,但我有以下代码,其中有两个函数添加矩阵的行,每种类型一个,它们给了我不同的答案。
另外,我在 GNU GCC 编译器(Windows 10)中收到一条警告:
警告:从不兼容的指针类型 [-Wincompatible-pointer-types]| 传递“addRow”的参数 1|
#include <stdio.h>
#include <stdlib.h>
#define R 2
#define C 2
void addRow(int arr[R][C]);
void addRow2(int * arr[R][C]);
void printArr(int arr[R][C]);
int main()
{
int arr[R][C];
for(int i = 0; i < R; i++) {
for(int k = 0; k < C; k++) {
printf("Enter %d-th row %d-th element:", i+1, k+1);
scanf(" %d", &arr[i][k]);
}
}
printArr(arr);
addRow(arr); // prints 11 and 6
addRow2(arr); // prints 26 and 12
return 0;
} /* =============== Main ================= */
/* Function that takes "int arr[][]" */
void addRow(int arr[R][C]) {
for(int j = 0; j < R; j++) {
int rowSum = 0;
for(int l = 0; l < C; l++) {
rowSum += arr[j][l];
}
printf("Sum of %d-th row = %d\n", j+1, rowSum);
}
}
/* Function that takes "int * arr[][]" */
void addRow2(int * arr[R][C]) {
for(int j = 0; j < R; j++) {
int rowSum = 0;
for(int l = 0; l < C; l++) {
rowSum += arr[j][l];
}
printf("Sum of %d-th row = %d\n", j+1, rowSum);
}
}
当我们在第一行输入 5 和 6,在第二行输入 2 和 4 时:
采用“int arr[][]”的函数的结果是:
第一行:11
第二行:6
采用“int * arr[][]”的函数的结果是:
第一行:26
第二行:12
能否请您帮助我了解其中的区别以及如何删除该警告?
【问题讨论】:
-
int arr[][]是int的二维数组。int * arr[][]是一个二维指针数组。它们完全不同。
标签: c arrays function pointers