Язык 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
,