#define rows 2 #define cols 2 #define NUM_CORNERS 4 int main(void) { int i; int the_corners[NUM_CORNERS]; int array[rows][cols] = {{1, 2}, {3, 4}}; corners(array, the_corners); for (i = 0; i < 4; i++) printf("%d\n", the_corners[i]); } int corners (int array[rows][cols], int the_corners[]) { the_corners = { array[0][cols-1], array[0][0], array[rows-1][0], array[rows-1][cols-1] }; }
我得到了这些奇怪的错误,我不明白为什么:
prog.c: In function ‘main’:
prog.c:10: warning: implicit declaration of function ‘corners’
prog.c: In function ‘corners’:
prog.c:15: error: expected expression before
答案 0 :(得分:2)
您尝试将初始化表达式用作赋值。即使在C99中,这也是无效的,因为the_corners的类型是int*
,而不是int[4]
。在这种情况下,您最好分别分配每个元素。
答案 1 :(得分:2)
the_corners = { ... }
语法是数组初始化,而不是赋值。我没有标准方便的副本所以我不能引用章节和经文,但你想说这个:
void corners (int array[rows][cols], int the_corners[]) {
the_corners[0] = array[0][cols-1];
the_corners[1] = array[0][0];
the_corners[2] = array[rows-1][0];
the_corners[3] = array[rows-1][cols-1];
}
我还冒昧地将int corners
更改为void corners
,因为您没有返回任何内容。而且您的main
也需要返回值,而您忘记了#include <stdio.h>
。
答案 2 :(得分:0)
主要不知道你的功能。将函数声明移到main之上或在main之前将其原型化:
int corners (int array[rows][cols], int the_corners[NUM_CORNERS]);
答案 3 :(得分:0)
试试这个:
#include <stdio.h>
#define NROWS 2
#define NCOLUMNS 2
#define NCORNERS 4
int corners(int (*arr)[NCOLUMNS], int* the_corners);
int main() {
int i;
int the_corners[NCORNERS];
int arr[NCOLUMNS][NROWS] = {{1, 2}, {3, 4}};
corners(arr, the_corners);
for (i = 0; i < NCORNERS; i++)
printf("%d\n", the_corners[i]);
return 0;
}
int corners(int (*arr)[NCOLUMNS], int* the_corners) {
the_corners[0] = arr[0][NCOLUMNS-1];
the_corners[1] = arr[0][0];
the_corners[2] = arr[NROWS-1][0];
the_corners[3] = arr[NROWS-1][NCOLUMNS-1];
return 0;
}
您可以阅读有关将2D数组传递给函数的here。