C言語の構造体ポインタトラップ

。 "" I、および " - >" の違い:

構造を宣言する場合、自動的に割り当てられたメモリ構造は、直接、例えば、本体に対応するメモリセル構造にアクセスすることが可能です「」。:

typedef struct Node{
    int value;
}node;

node o;
o.value=2;

(* O).VALUE相当する一方で、内部変数へのアクセス - 「>」ステートメントは、構造体へのポインタであるなら、手動で使用し、その後、メモリブロックへのポインタの後に、メモリの構造を開く必要がありますO->の値。

node *o;
o->value=2;

第二に、構造体へのポインタポイントを初期化する必要があります。

#include <stdio.h>

typedef struct Node{
    int value;
}node;

int main(){
    node *o;
    o->value=2;
    printf("%d",o->value);

    return0;
}

間違ったことを問題なくコンパイルこのコードを実行している、なぜ?
       ノード構造を指すために使用していますが、彼に割り当てを与えていないoを構造体へのポインタを定義し、システムが唯一「oはメモリユニットのノード構造の最初のアドレスである必要があり、」知っているが、アドレスはどのくらい、まだ割り当てられていませんので、NULLの値Oこの場合には、* O点はしばしば言って、ランダムまたは空のメモリ空間である「野生のポインタを。」従ってP-> A = 1文エラーが発生します。我々は、Oに初期化されなければならないので、二つの方法で初期化。
       一つは、動的に割り当てられたメモリのmallocであります:

o=(node *)malloc(sizeof(node));
o->value=2;

Oもう一つのポイントは、ノードの既存の構造は以下の通りであります:

node r;
o = &r;
o->value=2;//因为o为指针,所以此时其实为r的value被赋值为2

 

リリース元の4件の記事 ウォンの賞賛0 ビュー62

おすすめ

転載: blog.csdn.net/qq_40285768/article/details/104607834