。 "" 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