2016-08-18 26 views
1

構造体の配列を作成したいと思います。配列の構造体は、ユーザーからのファイル/入力から読み込まれます。構造体内の配列要素にアクセスする(構造体の配列の一部です)(C言語)

Iの構造体を宣言する:

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

typedef struct student ST; 

Iは、(サイズの入力を取得した後)構造体の配列にメモリを割り当てる:

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

Iは、各構造体に各アレイのためのスペースを割り当てます(ループを使用):

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; 
関連する問題