C言語なら、俺に聞け! <9>

このエントリーをはてなブックマークに追加
474Kusakabe Youichi
In article >>471, じゃばちゅぅ〜/471 wrote:
> 例えば、2次元配列は100%ポインタのポインタに成りうるけど、逆は必ず真では無い
> と言う感じでしょうか、

そういうふうに考えるとよけいに混乱します。

> と言うかfunc(char **str_ptr);
> みたいなプロトタイプが有ったとすると、str_ptrが2次元配列なのか
> 単にchar型へのポインタへのポインタなのかは定義部を見ないと分からないですかね。

その前にCの関数の引数はcall by value..のことを思い出さないとだめ。
foo(int);というプロトタイプの関数があったとして、
それにfoo(a);と呼び出すときと、foo(100);とやるときで、
受け取る側でどうなるかを関数定義部分(きっとfoo(int x){ ....}みたいに書いて
あるはず)でどうなるかを考えてみてください。

あと、
int *a;
というポインターでも
int b[10];
という配列でも
b[1]やa[1]はかけますが、
a++はできてもb++ができないのはなぜか
(つまりint iのi++ができても10++ができない理由も)
そのへんを理解していれば、(理解できる入門書を買えば)わかりやすくなります。

> 今日K&R買いに行くので、これだけ教えてプリーズです

英語を読めるならばできれば原書のほうがいいです。