- ベストアンサー
ポインタ
c言語のポインタの意味がさっぱりわかりません。プロの方に聞いても「住所」っていうだけで自分ではなんじゃそりゃ!って感じです。「*」と「&」の意味もよくわからなく… だれかよろしくお願いいたします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
プログラム初めて間もない人のようですので例えてみます 本で考えてみてください ポインタ:ページ番号 データ:ページに書かれている情報 みたいなものです 「*」「&」の違いは 「*」データのページ番号 「&」データ自身のページ番号 みたいなものでしょうか 例の関数を書きますと下のような使い方ですかね void ZeroSet( int* out_iNum ){ *out_iNum = 0; //渡されたページに0を書く } main(){ int iTest; ZeroSet( iTest );//書き込むページ番号を渡す //この段階でiTestには"0"が入っています } 間違っていたら次の方訂正お願いします
その他の回答 (3)
- mozura
- ベストアンサー率100% (1/1)
ごめんなさい 例を間違えていました void ZeroSet( int* out_iNum ){ *out_iNum = 0; //渡されたページに0を書く } main(){ int iTest; ZeroSet( &iTest );//書き込むページ番号を渡す(訂正) //この段階でiTestには"0"が入っています }
- arain
- ベストアンサー率27% (292/1049)
>プロの方に聞いても「住所」っていうだけで自分ではなんじゃそりゃ!って感じです。 いや、実際にそのとおりなんです。 プログラムはすべてメモリ上で動作します。このメモリには、1バイト単位ですべて「アドレス」というものが割り振られています。 地図でいう住所や番地と同じ意味と思ってください。 変数を宣言したりmalloc()を使用すると、メモリの空いているところから必要な分を確保します。 土地で言えば、未開拓の土地を家を建てたり公園にしたりするために造成したような感じです。 ポインタは「変数が確保されているメモリのアドレス」を格納しておくための専用の変数です。 土地に置き換えると「造成した土地は○○という場所だよ」ということが書いてあるのと同じです。 そのため「ポインタ」=「住所」という例えになります。
お礼
なるほど… 簡単なプログラムでは理解できるのですが、ループなどがあり、アドレスが変化するとチンプンカンプンになってしまいます。
- asuncion
- ベストアンサー率33% (2127/6289)
以下の各文はわかりますか? int a, b; int *p; a = 123; // aに123を代入 p = &a; // pはaを指す b = *p; // bは、ポインタpを経由して、aと同じ値になる
お礼
そこまではわかります。 a = 123; b = 123; ですよね。 でも大きなプログラムを作ると頭がこんがらがります;;
お礼
a = 2; p = *a; だとしたら a(2)がかかれているページはpということですか 例を見て、理解はできました。