почему GCC "ожидает выражения"? - PullRequest
0 голосов
/ 01 мая 2011
#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 ]

2 голосов
/ 01 мая 2011

Вы пытаетесь использовать выражение инициализатора в качестве назначения.Это недопустимо даже в C99, потому что тип the_corners int*, а не int[4].В этом случае лучше всего назначать каждый элемент отдельно.

2 голосов
/ 01 мая 2011

Синтаксис 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>.

0 голосов
/ 01 мая 2011

Попробуйте это:

#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;
}

Вы можете прочитать здесь о передаче двумерного массива в функцию.

0 голосов
/ 01 мая 2011

Главное не знает о вашей функции.Либо переместите функцию decleration над основной, либо создайте прототип перед основной:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...