C语言:在结构中访问结构中的字段的方法(有点棘手)

时间:2013-11-02 18:28:54

标签: c arrays pointers structure

我们有一个声明了这些结构的头文件:

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 */
    }

基本上我们最大的问题是访问该字段的正确方法。所有的*和&amp;'s都让我们感到很困惑。如果有人也可以简要说明它的工作原理,我们将非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

没有解除引用,只是简单明了

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

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

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

请注意我更改了用于分配的类型。您分别为int*int分配。这不会起作用,特别是对于最后一个,因为三个short最有可能更大而不是单个int