2009-07-10から1日間の記事一覧

オプション付きソートプログラム

C K&R

K&R本 演習5-14、演習5-15 sortを変更して分類を逆方向にすることを指示する-rというフラグを取り扱えるようにせよ。-rは-nと同時に使えなければならない 分類において、大文字と小文字の区別をなくしてしまうためのオプション-fを加えよ。これによって、大…

整数定数とポインタへのキャストの挙動の意味

C

ようやくわかったかもしれない。 int main (void) { int *a = (int *)100; printf("%d \n",a); return 0; } $ main 100これが100と表示される意味。整数定数がどうとか考えるからややこしかったのかも。まず実体のある変数のポインタを表示させてみる。 int …

総称ポインタを使ったswap関数

C K&R

K&R本 5-11今までswap関数として以下のものを使っていました void swap (int *a, int *b) { int work = *a; *a = *b; *b = work; } しかし、これだと別の型の場合に同じような別の関数を作らなくてはいけないので面倒でした。これに対するK&R本に一つの解が…

ファイルの内容を行毎に配列して取得する

C

ファイルの内容を行毎に全部取得して二次元配列にするプログラムです。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define LINEMAX 100 #define LINESMAX 5000 int readlines (FILE *fh,char **lines,int size) { int linenum = 0; size_t len; size_t linelen = 0; ch</string.h></stdlib.h></stdio.h>…

単語数算出を二分木でやる

C K&R

K&R本 6.5単語数の算出処理に二分木の話が出てきたので復習がてら実装してみる。 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #define WORDMAX 100 struct NODE { char *word; int count; struct NODE *left; struct NODE *right; }; typedef struct NODE NODE</ctype.h></stdlib.h></string.h></stdio.h>…

int (*p[])()ってなんだ?

C K&R

K&R本 5.12複雑な宣言で出てきたこれ int (*p[])(); 所見なんだこりゃってなったけど少し考えてわかった。これはつまり関数ポインタの配列ってことね。関数プロトタイプを宣言してないので一瞬なんだろうと迷ってしまった。これは多分正しく書くなら int (*p…