2016-08-18 72 views
1

我想創建一個結構數組,雖然沒有。數組中的結構體是從用戶的文件/輸入中讀取的。訪問結構內的數組元素(它是結構數組的一部分)(在C中)

我聲明一個結構:

struct student{ 
    char name[16]; 
    int *available; 
    int sum; 
}; 

typedef struct student ST; 

我分配內存結構的陣列(獲得尺寸的輸入後):

ptr = (ST*)calloc(lines, sizeof(ST)); 

我還分配空間中的每個結構的每個陣列(使用循環):

ptr->available = (int*)calloc(lines, sizeof(int)); 

NOW - 我想把值放在這些數組中。我如何到達每個元素?

我想:

*((ptr+i)->(available+j)) = 1; 

但是,編譯器告訴我:error: expected identifier before ‘(’ (i和j是索引我用,我爲第i結構,和j對數組的第j個元素)。

我在做什麼錯?

回答

3

考慮使用數組索引符號是爲了便於閱讀:

ptr[i].available[j] = 1;

(使用顯式指針算術的等效語法是相當多的混淆*((ptr + i)->available + j) = 1;

1

忘記*(ptr + idx)符號;它被用來混淆初學者,而不是「真正的代碼」。但是,如果你必須使用它,那麼:

*((ptr+i)->available+j) = 1; 

但使用:

ptr[i].available[j] = 1;