Как использовать структуру в C? - PullRequest
1 голос
/ 06 ноября 2011

Вот мой код:

struct Point
{
    int i;
    int j;
};

int main(int argc, char *argv[])
{
    int n = atoi(argv[1]);
    int a;
    int b;
    for(a = 0; a < n; a++)
    {
        for(b = a+1; b < n; b++)
        {
            struct Point *data = (struct Point *) malloc(sizeof(struct Point));
            data.i = a;
            data.j = b;
            // do something here
            free(data);
        }
    }

    return 0;
}

Я получил ошибку в data.i = a; и data.j = b;:

error: request for member 'i' in something not a structure or union
error: request for member 'j' in something not a structure or union

Как я могу исправить эту ошибку?

Кроме того, я должен использовать free() после malloc(sizeof(struct Point))?

Ответы [ 3 ]

4 голосов
/ 06 ноября 2011

data - указатель.Вы должны сказать data->i и т. Д. Звоните free(), только если вам больше не нужна структура данных.

2 голосов
/ 06 ноября 2011

data - это указатель на структуру, а не на фактическую структуру. Вы должны использовать data->i вместо.

И да, если вы malloc() структура, то вы должны free(), когда вы закончите с этим.

0 голосов
/ 06 ноября 2011

В дополнение к ответам выше, небольшое объяснение:

У вас есть указатель на структуру.Во-первых, вы должны разыменовать его с оператором «звезда», а затем вы можете использовать его.Оператор "->" является сокращенной формой "* v."где v указатель на структуру.Таким образом, у вас есть data->i, что эквивалентно *data.i

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