構造体のメンバに*が付いているものと付いていないものの違いが分からないです。
ネットで調べると自身参照構造体というものが出てきましたが、よくわかりませんでした。初歩的な部分だとは思いますがよろしくお願いします。
// 構造体 typedef struct person { char *name; char sex; int age; char *add; char *job; } person2; int main(void) { person2 sato, *p1; p1 = &sato; // 実体のアドレス p1->age = 20; // ポインタを使ってメンバの初期化 printf("%d\n", sato.age); person2 kato, *p2; p2 = &kato; // 実体のアドレス *p2 = *p1; // アドレス先の値を共有 printf("%d\n", kato.age); return 0; } コード
既に回答はいただいていますが、双方向リストなどで使われる「自己参照構造体」は関係ないです。ポインターや、ポインターの意味するところ(ポインターの値が指し示す実体は別のところにある)は理解されている前提ですか?
変数のアドレスを格納する変数という理解でいます。
なぜ、name,add,jobだけがポインタ宣言されているのかが分からないです。
> name,add,jobだけがポインタ宣言
使われていませんが...
char* ですので, 文字列用の領域を別に確保して入れるつもりなのでしょう.
このコードだけであればname,add,jobはポインタでなくても大丈夫だということでしょうか??
サンプルコードとしては, 恐らく注目すべきは構造体の中身では無く, main メソッドでの person2 のポインタ(アドレス)の扱いのほうかと思います.
そうですね、person2の説明がしてありました。
ご対応ありがとうございました。