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;
};
struct s {
struct a {
int year,month,day;
char name[40];
} birthday;
struct s next;
};
のようにすると、「たくさんの」誕生日と名前を連ねることができる。が、
この構造の終わりを定義できない。ここで、next を次の名簿の「名前」
とすると、構造自体は完結することができる。この「名前」をポインタ
と呼ぶ。
struct s {
struct a {
int year,month,day;
char name[40];
} birthday;
struct s *next;
};
C言語におけるポインタ関係の演算には以下のようなものがある。
プログラム例1
プログラム例2
プログラム例3
このプログラムで空の待ち行列は下図のように表される。

ここで、待ち行列にデータが入ると、新しいリストを作成し、 ポインタを以下のように書き換える。

待ち行列からのデータの取り出しは、以下のように右端 のリストから行われる。データを取り出して不要になった リストは free()によって削除される。


main(int argc, char **argv)で呼び出すとコマンドラインからの引数を渡すことができる。 ここで、argc は引数の数であり、argv は引数の文字列(ポインタ)への ポインタである。引数を表示するプログラムを作りなさい。