2016-10-08 9 views
-1

私のオペレーティングシステムコースの実践を進んでいますが、私はこの例の周りに頭を浮かべることはできません。私はプログラムを実行したが動作しません。 C動的割り当てmalloc struc

#include <stdio.h> 

typedef struct { 
int age; 
float height;}Person; 

void init(Person *); 
int main() { 

Person *Callum; 
Callum = malloc(sizeof(*Callum)); 
init(Callum); 
printf("Age: %d, height: %f\n", Callum.age, Callum.height);} 

void init(Person * individual) 
printf("Age: "); scanf("%d", &(individual->age)); 
printf("Height: "); scanf("%f", &(individual->height));} 

は私が起こっていると思うかを説明しようとするつもりだとあなたは私のロジックを修正することができれば私は非常に感謝される:

  • 私たちは、Person型のして、Callumと呼ばれるポインタを持っています。
  • 'Callum = malloc(sizeof(* Callum));' =>これは、変数callumに、ヒープ上のstructのメモリサイズが割り当てられていることを意味しますか?
  • 人は変数Callumを指しています。編集:私はそれを入力して混乱して申し訳ありません、私は個人が我々のstruc Personを指していることを意味します。
  • プログラムは入力を読み込み、変数Callumの場所であるindividualのアドレスに割り当てます。次に、Callumの値を出力します。

申し訳ありませんが、これは私の脳を揺らしています。私はstrucとポインタの基本的な仕組みを知っていますが、私は何が起こっているかを視覚化することはできません。どんな助けもありがとう。ありがとうございました。あなたのコードで

+0

"パーソン・ポイントへ..." - 'Person'は、そう間違っ*タイプ*、ではないポインタです。 – WhozCraig

+0

変数名には小文字を使用してください –

+0

この混乱は読めません。インデントサイトルについて学び、投稿前に「インデント」を使用します。 – Olaf

答えて

0

void init(Callum * individual) 

が間違っています。書く必要があります

void init(Person * individual) 

Personはデータ型です。また、関数は中括弧で囲む必要があります。main()と同じです。質問

    に関するご main()でも

    Callumはポインタ型であるとして、あなたが言ったポインタメンバーの間接参照演算子->

    printf("Age: %d, height: %f\n", Callum->age, Callum->height); 
    

    を使用する必要があり、

  • Callum = malloc(sizeof(*Callum)); = >これは、変数callumにヒープ上のstructのメモリサイズが割り当てられていることを意味しますか?
    • はい
、限り malloc()は成功です。私たちの変数
  • そうでもないして、Callum
  • 人を指します。正確な表現方法はCallumPersonへのポインタ型の変数です。
  • あなたがする必要がある
+0

注:OPは質問を変更し、あなたの答えは(部分的に)無効にしました。今度はロールバックするようにあなたに任せます:-) – Olaf

0

printf("Age: %d, height: %f\n", Callum->age, Callum->height);} 
関連する問題