- ベストアンサー
ポインタについての良いテキストを探しています
- ポインタについての基礎から応用まで、わかりやすく解説されているテキストをお探しですね。
- ダブルポインタやトリプルポインタなど、より高度なポインタの使い方についても詳しく解説されているテキストがほしいです。
- 関数に渡すときの値渡しや参照渡しについては理解しているが、構造体や文字列が絡む場合のポインタの使い方についても解説されているテキストが望ましいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
webサイトですが分かりやすいと思います。
その他の回答 (2)
- sankaku197
- ベストアンサー率47% (29/61)
あ、すみません書き忘れました。 2次元、3次元配列について、先程のイメージで書くと以下のようになります。 なのでダブルポインタ、トリプルポインタが必要になります。 2次元配列のイメージ p1 → p[0] → オブジェクト[0] オブジェクト[1] オブジェクト[2] ・・・ → p[1] → オブジェクト[0] オブジェクト[1] ・・・ ・・・ 3次元のイメージ p2 → p1[0] → ・・・ → p1[1] → ・・・ → p2[2] → ・・・ ・・・ すみません、参考テキストのお勧めではなくて申し訳ないです。
お礼
ご回答ありがとうございます。 いえ、ポインタと多重配列とか構造体とかmallocとかの関係がどういうものなのか 理解出来ていないのでとても助かります^^
- sankaku197
- ベストアンサー率47% (29/61)
ダブルポインタ、トリプルポインタについて。 p1 → p → オブジェクト このイメージで分かりますでしょうか? 「p1はpの実体を指したい場合」があります。 この時、pが頻繁にnewとdeleteを行う場合、以下のようにしてしまうと問題があります。 int *p = new int; int *p1 = p; delete p; p = new int; //この時点でp1はdeleteされたアドレスを指している これをイメージ化するとこうです。 p > オブジェクトA p1 ↓ p - オブジェクトB p1 - オブジェクトA つまり最初のイメージ「ポインタpを指すポインタ」が必要になってきます。 int *p = new int; int **p1 = &p; delete p; p = new int; トリプルポインタも同様に考えていけば良いと思います。 p2 → p1 → p → オブジェクト
お礼
ご回答ありがとうございます。 int **p1 = &p; でポインタpのアドレスをp1に保持しておくと、 その後、pをdeleteしてからnewしても、変わらず同じオブジェクトを指すのでしょうか。 delete p; p = new int; は、オブジェクトは別物になるけれど、アドレスは変わらないの…かな? C++は経験がないのでうまくイメージ出来ていないかもしれませんが、 そういう「ポインタのポインタが必要になる」事例が知れてよかったです。 私の場合、ポインタのポインタが必要になるのは、関数への、ポインタ変数のアドレス渡し、くらいしか経験がないので…。 試行錯誤しつついろいろテストプログラムを書いて勉強したいと思います。 ありがとうございました。
お礼
ご回答ありがとうございます。 さらっとしか見ていませんが、配列やmallocなどについても書いてあり、 私の求めていたものに近いです。 現場はネット接続できず、動作不良が起こっても持ち込みの本とサンプルコードを書いて なんとか(誰もよく理解出来ないままに正常に動いているならそれでいいとして)解決 している状況なので、なかなかWebサイトは見る時間が取れませんが、 休日の空いている時間に勉強したいと思います。 ポインタって難しいですよね(私だけかもしれませんが)。 頑張ります。ありがとうございました。