2005-06-01から1ヶ月間の記事一覧
「リンクリスト 3」 先頭が ダミーで、末尾が null ▽ 初期化: struct Item list; list->next = NULL; item の後に n を 挿入: n->next = item->next; item->next = n; item の後を 削除: save = item->next; item->next = item->next->next; 移動: for (ite…
「リンクリスト 2」 先に 進む前に、番兵について 少しだけ 述べてみましょう。 番兵には 3つの 型があります。 null ポインタ、ダミーノード (特別な、中身のない - invalid value - 項目で、番兵として 使うことが できます) それと 循環リンクです。 null…
「リンクリスト」 リンクリストって 何なのだろう ? リンクリストとは、要するに、それぞれの項目 - item - が その次を 指し示している、そんな項目が 集まった ものなんです。 |1| -> |2| -> |3| -> |4| -> |5| -> - そのシーケンスは、番兵 - sentinel - …
ついでに C Library の Apprendix C から、 引数 (argument) : 関数 呼び出し時に、1つの パラメータに 対し その初期値 - initial value - を 規定する 表記のこと。 表記法 (expression) : C プログラムでは、トークンの 連続した シーケンスを 指し、どの…
(続き) この本の スタイルとしては、できるだけ NULL を 使うようにします。 null ポインタが 差し出す、役に 立ちますよ という 合図 - useful signal - に 気が ついた からです。 関数ポインタには、null ポインタ定数を 生成する - generate - キャスト…
(続き) このような 実装のうち、最も 安全な NULL の 定義が (void *)0 です。 保証されては いませんが、しかし、この void への ポインタは、その表記が 他の どのポインタとも 同じになります。 ただし、もちろん、関数への ポインタには 割り当てられず …
(続き) 初期の C の 実装では、すべての ポインタが 同じ表記法 - representation - を もっていました。 通常、この表記法だと、integer 型の int か long の 1つと 同じサイズに なります。 ですので、10進法定数 - decimal constant - の 0 または 0L の …
(続き) 現在の プログラミングスタイルでは、呼び出された すべての 関数に対して、プロトタイプ - function prototype - が 宣言されます。 にもかかわらず、関数の 引数 - function argument - が どこかは、パラメータ宣言と 対応していない という 重要…
崎山氏の 理不尽な 暴露工作によって、sarasa さんの page が 閉鎖された。 彼の 意図が どこに あったかに ついて ネット上で 議論されているが、それを 一言に 集約すると intelligence という ことだろう。 辞書を 引くと、知性、情報 あるいは 報道、と …
(続き) NULL は、たいていの 一般的な null ポインタ変数としての 目的に 適っています。 データオブジェクトポインタとして 用いることで、プログラムでは、宣言された - declare - (または 割り当てられている - allocate -) データを含まない オブジェク…
ヘッダファイルの stddef.h が tutorial に チラッと でてきたので、The Standard C Library を のぞいてみた。 手元に あっても なかなか 読むことが ないし、NULL の ところだけでも チェックしてみる。 NULL - the macro NULL - を 実現させるには、単に…
tutorial の 訳で ど〜も 煮詰まっていて、調子が よくない。っていうか、他のことに 興味が 向いてこない。 それでは ということで、debian sarge も リリースされたことだし と思い、ちょっと 手を出してみました。 結論から いえば ... 1日 つぶれてしま…
「ポインタ 5」 もう一度 注意してほしいのは、宣言や 間接参照で 余分に * を つけ加えたときの、ダブルポインタの シンタックスは、ポインタが 1つの場合に 準じている、ということです。 外部の ポインタを 間接参照するときには、よく 確かめてください…
「ポインタ 4」 ポインタは、実行中に - at runtime - (メモリの) 増減が できるので、データ構造体では、さかんに 使われます。 動的なサイズ設定 - dynamic sysing - では、プログラマに、malloc, calloc, realloc それと free を 使うことで、ポインタを …
「ポインタ 3」 ポインタとして 返すことで (関数の) 返り値を 効率よく 改良することが でき、変数は、関数の 外側で 交換することが 可能になります。 ただし、それを 考慮に入れようとすれば、そこには 1つ 大きな 落し穴が 待ち受けています。 ローカル…
「ポインタ 2」 次が、null ポインタです。 どこも 指さない ポインタを 特別に 必要とするとき、指定する 変数 - valuable - が null ポインタです。 この値は、ポインタ変数を 安全に 作動させたい場合や、malloc のような 関数で、エラー時に 返される ポ…
「ポインタ」 C では、データが どんな型であっても、その型の ポインタを もつことができます (たとえ 関数 だったとしても !)。 では ポインタの使い方を 少しだけ 見てみましょう。 先へ進む前に、ポインタの 2つの 特別な バリエーションに 触れておくこ…
「ソート法 6」 void shellsort(int *list, int n) { int h = 1; for ( ; h ; for ( ; h > 0; h /= 3) insertion_sort(list, h, n); } 結論として、この 2つの関数は、ソートルーティン - sorting routine - で 最初に 選択するのには、オールアラウンドに …
「ソート法 5」 シェルソートの 背後にある アイデアとして、要素の交換が 挿入整列法と 比べて より 大きな距離で 行なわれる ということがあり、それで 高速度が 実現されるのです。 この分岐操作の テクニックは、"h-整列" - "h-sorting" - として 知られ…