Язык C: способ доступа к полю в структуре, внутри структуры (немного сложнее)

У нас есть заголовочный файл с объявленными этими структурами:

typedef struct{
    unsigned short rgb[3];

}PIXEL_T;

typedef struct{
    int format;
    int nrows;
    int ncolumns;
    int max_color;
    PIXEL_T **pixels;

}PBM_T;

И мы пытаемся получить доступ к полю rgb[0], чтобы записать в него число. Но так как мы новички, работать с массивом "указатели указателей" оказывается сложно. Вот наша лучшая, неправильная попытка:

/*pbm was previously declared as a PBM_T structure. rows and columns are auxiliary       variables to send to the nrows and ncolumns field. we're suppose to create a bitmap matrix*/

pbm->(**pixels) = malloc(sizeof(int *)*rows);
if (pbm->(**pixels) == NULL)
ERROR(ERR_ALLOC,"Error allocating memory for the bitmap matrix");

int i;

for(i = 0; i < columns; i++) {
    pbm->pixels[i] = malloc(sizeof(int)*columns);
    }

    pbm->&nrows = rows;
    pbm->&ncolumns = columns;

    while((getline(&line, &len, file_stream)) != 1) {
    getline(&line, &len, file_stream);
    sscanf(line,"%d",&pbm->pixels[i][j]->rgb[0]); /* i and j are for two for cycles we're going to implement */
    }

По сути, наша самая большая проблема - правильный способ получить доступ к этой области. Все * и & 'ы нас сильно смущают. Если бы кто-то мог также дать краткое объяснение того, как это работает, мы были бы очень благодарны. Заранее спасибо.

1 ответ

Решение

Нет разыменования, просто ясно и просто

pbm->pixels = malloc(sizeof(PIXEL_T *)*rows);

а также

if (pbm->pixels == NULL) ...

а также

pbm->pixels[i] = malloc(sizeof(PIXEL_T)*columns);

Обратите внимание, что я меняю тип, используемый для распределения. Вы выделяете на int* а также int соответственно. Это не сработает, особенно для последних, так как три short скорее всего, больше, чем один int,

Другие вопросы по тегам