将数组传递给函数作为func(int*arr[][])和func(int-arr[][])之间的区别?
我在google上搜索了一下,发现它们没有任何区别,但我有下面的代码,其中两个函数添加了一行矩阵,每种类型一行,它们给出了不同的答案 此外,我在GNU GCC编译器(windows 10)中收到一条警告,上面说: 警告:从不兼容的指针类型[-Wincompatible指针类型]传递'addRow'的参数1|将数组传递给函数作为func(int*arr[][])和func(int-arr[][])之间的区别?,c,arrays,function,pointers,C,Arrays,Function,Pointers,我在google上搜索了一下,发现它们没有任何区别,但我有下面的代码,其中两个函数添加了一行矩阵,每种类型一行,它们给出了不同的答案 此外,我在GNU GCC编译器(windows 10)中收到一条警告,上面说: 警告:从不兼容的指针类型[-Wincompatible指针类型]传递'addRow'的参数1| #包括 #包括 #定义r2 #定义C2 无效地址行(内部地址[R][C]); void addRow2(int*arr[R][C]); 无效打印阵列(内部阵列[R][C]); int mai
#包括
#包括
#定义r2
#定义C2
无效地址行(内部地址[R][C]);
void addRow2(int*arr[R][C]);
无效打印阵列(内部阵列[R][C]);
int main()
{
国际航空公司[R][C];
对于(int i=0;i
当我们为第一行输入5和6,为第二行输入2和4时:函数获取“int arr[][]”的结果是:
第一行:11
第二排:6
函数取“int*arr[][]”的结果是:
第一排:26
第二排:12
你能帮我理解其中的区别以及如何删除该警告吗?
int-arr[R][C]
是一个由int
组成的二维数组int*arr[R][C]
是一个由int*
指针组成的2D数组,考虑到该函数是如何实现的,它没有任何意义
不幸的是,在默认模式下,gcc并没有给您任何好处,在默认模式下,它不会给出来自C语言冲突的错误,只是警告。因为addRow2(arr)
不是有效的C,如果编译器在非C模式下抛出一个二进制文件,会发生什么,这是任何人的猜测
也许你从addRow2
中奇怪的输出可以解释为它以某种方式给了你64位的块,但是研究它没有什么有趣的地方,因为它是一个格式不正确的程序
如果要阻止无效的C进行编译,请使用
-pedantic errors
进行编译。int-arr[R][C]
是int
的2D数组int*arr[R][C]
是一个由int*
指针组成的2D数组,考虑到该函数是如何实现的,它没有任何意义
不幸的是,在默认模式下,gcc并没有给您任何好处,在默认模式下,它不会给出来自C语言冲突的错误,只是警告。因为addRow2(arr)
不是有效的C,如果编译器在非C模式下抛出一个二进制文件,会发生什么,这是任何人的猜测
也许你从addRow2
中奇怪的输出可以解释为它以某种方式给了你64位的块,但是研究它没有什么有趣的地方,因为它是一个格式不正确的程序
如果要阻止编译无效的C,请使用
-pedantic errors
编译。int-arr[][]
是int
的2D数组int*arr[][]
是一个二维指针数组。它们完全不同。int-arr[][]
是int
的二维数组int*arr[][]
是一个二维指针数组。他们完全不同。
#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);
}
}