为什么海湾合作委员会“期待一个表达”?

时间:2011-04-30 22:17:03

标签: c expression

#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 

4 个答案:

答案 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