質問: Wポインタってどういう時に使うものなのですか? ポインタを使ったリスト関数とどこが違うのですか? Wポインタを使う利点は・・・? 頭がこんがらがってしまいます。 もう半年くらい考えてるんですけどよくわからないのです。 どなたか教えて頂けるとありがたいのですが・・・。
回答: ダブルポインタ(ポインタのポインタ)をよく使う場合は、例えば2次元の配列を関数に渡したいときによく使います。 int arry[3][3]; こんな2次元配列が有るとします。 これをすべて1で初期化する関数は以下のようになります。 void func(a) int **a; { int i,j; for(i=0;i<3;i++) for(j=0;j<3;i++) a[i][j]=1; } これが一番良く使うやり方の例と思います。 関数内での左から一つ目のポインタは、配列の1次元目の先頭アドレスにあたります、2つ目も同様に配列の2次元目の先頭アドレスに対応します。 ふつう1次元配列を関数に渡す場合、ポインタ変数を受け側引数として宣言し、配列の先頭アドレスの値となる配列名を入力引数として渡します。 しかし2次元配列の場合、一つのポインタだけでは配列の1次元目のアドレス値しか受け取ってくれません。そこでこのように2次元目の配列にあたるアドレスを受け取れる様、ポインタをもう1つ付け加えてやっている訳です。 他にも色々有るかと思いますが思い浮かびませんこのくらいにしときます。 ちなみにダブルポインタがわかれば3つや4つも簡単ですが、果たしてそれが万人に受け入れられるかどうかは別の話です。 リスト構造の方が人間的に分かり易いですし、保守も簡単です。今の時代のマシン環境ならリストのオーバーヘッドもあまり気にならないでしょう。 たとえそのプログラムがとてもよく出来ていたとしても、mealさんが悩んだように、後になってそのソースを見る人も半年悩むとしたら時間の無駄になってしまいますしね。 なんだか半分セッキョウになってしまいましたがこんなところです。 参考URLは僕がこのごろ参考にしてるとこで、ダブルポインタを使ったプログラムとセッキョウが載ってたので付けときました。 それでは 参考URL: