2017-05-17 8 views
0

が、私は以下のプログラムを持っていると、コンパイルは成功するが、実行中に、Eclipseでプログラムがクラッシュし理解ポインタが

struct Student 
{ 
    unsigned int *ptr; //Stores address of integer Variable 
}*s1; 

int main() 
{ 
    unsigned int roll = 20; 
    s1->ptr = &roll; 

    printf("\nRoll Number of Student : %d",*(s1->ptr)); 

    return(0); 
} 

ロール使ってポインタの値を印刷する方法、それをアクセスするには、Cでポインタのメンバーを指します構造

+1

S1は –

答えて

2

に、Student構造を作成し、それを割り当て、

typedef struct Student 
{ 
    unsigned int *ptr; //Stores address of integer Variable 
} Student; 

int main() 
{ 
    Student *s1; 
    unsigned int roll = 20; 
    s1 = malloc(sizeof(Student)); 
    if (s1 == NULL) { 
     return -1; 
    } 
    s1->ptr = &roll; 

    printf("\nRoll Number of Student : %d",*(s1->ptr)); 
    free(s1); 

    return(0); 
} 
+0

を割り当てられていない、それを使用私はちょうどへのポインタを宣言したいです構造体とそれを介して* ptrメンバにアクセスする...ここで私はs1が単なる構造体であり、構造体へのポインタではないことがわかります。私は正しい? – danny

+0

ポインタが必要な場合は、ポインタを割り当てるために 'malloc'を使う必要があります。私はコードを更新する –

+0

ありがとうOrel。この概念をよりよく理解するために、malloc()を使用せずに* ptrメンバの値を割り当てることはできませんか? ....もう1つの方法は、構造メンバを変数のアドレスで初期化できますか? – danny

関連する問題