自己参照構造体は、 メンバに自分自身と同じ型の構造体へのポインタを持つ構造体のこと。
構造体に限らず、配列を利用する場合は、 あらかじめ必要な領域を充分確保しておかなければならないが、 構造体のメンバで同じ型の構造体へつながるポインタを持っておき、 必要に応じてメモリ内で必要な領域を確保、解放することで、 柔軟にデータを扱うことが出来る。 ポインタによってつながれた各々のものをノードと呼ぶ。 ポインタが次のノードへつながるものだけならば一方向のリスト、 次のノードと手前のノードの２つを持つならば双方向のリストになる。 リストがＪＲの山手線の様に環状につながる場合もある。 ｒｏｏｔとなるノードを頂点に、 右へと左への２つ（或いは右へ、左へ、親への３つ）のポインタを持つノードがつながるならば、 二分木構造になる。 長くなるので此処では今は詳しく書かないが、興味のある方は、調べるべし。
Ｃ言語って、「こういう書き方も出来る」とか「こういう考え方もある」とか、いっぱい有るので、 とりあえず、ざっくりと。
恐ろしく手抜きな一方向リストによる伝言板の例。
伝言の追加と表示をするだけ。 あくまでもサンプル例であり、あまりエラー処理をしていないので要注意。
右図は概念図。 黒い矢印はノードの追加処理の流れ、赤い矢印はノードの参照の流れを表している。 また、２つのＸ番地は、同じ番地であることを表す。
ノードを追加する際は、malloc で Dengonban のサイズのメモリをガバッと確保し、 各メンバのサイズで区切られた領域に、該当するデータを入れていく。