2017-04-27 5 views
2

動的に割り当てられたメモリの連続した1つのチャンクでどのようにインデックスを作成するかはわかりません。メインcの構造のmallocを使用したメモリチャンクによるインデックス

//Create enough memory to hold 20 'Person's 
Person *people = (Person *)malloc(sizeof(Person) * 20); 

どのように私はこの貫通インデックス変数名と各人物の年齢を設定することが可能で

typedef struct p 
{ 
    char name[30]; 
    int age; 
} Person; 

...?ファイルに適切なレイアウトが与えられていることを考えてください。

私は以下のことを試みましたが、数回反復した後、私はセグメンテーションを取得しました。

int i; 
for (i = 0; i < 20; i++) { 
    fscanf(file, "%s", (people + (i * sizeof(Person)))->name); 
    fscanf(file, "%d", &((people + (i * sizeof(Person)))->age)); 
}  

「[x]」を使用してインデックスを作成する方法はありますか?

あなたは

+0

なぜ、Cのみにタグを付けたいのですか? –

+0

なぜ 'fscanf(file、"%d "、&people [i] .age);'などと書かないのですか? –

答えて

2

私はここで混乱がポインタ演算がどのように機能するかについてだと思いますありがとうございました。

T*タイプのポインタにxを追加すると、xはベースポインタに追加されず、x * sizeof(T)が追加されます。 people[i]を -

だから、あなたのケースを解決するために、あなたが使用することです (people + i)代わりにそれを行うための別の方法

(people + i* sizeof(..))のを使用することができます(。 void*ポインタ演算の例外を除いて void*に定義されていません)。

ポインターによってポイントされるメモリーは、同じタイプの配列と同様に索引付けできます。

これが混乱を解消することを希望します。

関連する問題