a * b + c * d - e基本構造は (x,y,z) y は演算子、x,z は被演算数。 struct 風に書くと、
-> (((a,*,b),+,(c,*,d)),-,e)
これを計算の手順と考える。次の例では、同じ計算が出てくる。struct Enzan { Hi_enzan_suu x; Enzan_shi y; Hi_enzan_suu z; };
a * b + a * b * c同じ物が2度以上出てくることを考え、算術式に名前づけを おこなう。
-> ((a,*,b),+,((a,*,b),*,c)))
(A,(B,a,*,b),+,(C,B,*,c))この場合構造は(n,x,y,z)で n はこの部分算術式につけられた名前。 struct 風に書くと、
struct Enzan { struct Enzan *n; Hi_Enzan_suu x; Enzan_shi y; Hi_Enzan_suu z; };
のようにすると、「たくさんの」誕生日と名前を連ねることができる。が、 この構造の終わりを定義できない。ここで、next を次の名簿の「名前」 とすると、構造自体は完結することができる。この「名前」をポインタ と呼ぶ。struct s { struct a { int year,month,day; char name[40]; } birthday; struct s next; };
C言語におけるポインタ関係の演算には以下のようなものがある。struct s { struct a { int year,month,day; char name[40]; } birthday; struct s *next; };
プログラム例1
プログラム例2
プログラム例3
このプログラムで空の待ち行列は下図のように表される。
ここで、待ち行列にデータが入ると、新しいリストを作成し、 ポインタを以下のように書き換える。
待ち行列からのデータの取り出しは、以下のように右端 のリストから行われる。データを取り出して不要になった リストは free()によって削除される。
main(int argc, char **argv)で呼び出すとコマンドラインからの引数を渡すことができる。 ここで、argc は引数の数であり、argv は引数の文字列(ポインタ)への ポインタである。引数を表示するプログラムを作りなさい。