ページ 11

ポインターってどんなときに使うの?

Posted: 2013年8月14日(水) 20:18
by なりすけ
はじめまして、「なりすけ」というものです。
C言語の勉強中のものなのですがまだ小さなプログラムしか書いた事がありません。
具体的にはジャンケンとかFizzBuzzとかです......
それで今ポインターの単元に入ったのですが、あまり深く理解ができません。
まぁ、便利なんだなぁとは思うんですが、先に書いた通りまだ小さなプログラムしか書いた事がないのでどんなときに便利なのかとかがよくわかりません。

なので、ポインターってどんなときに使われてるのかを教えて頂くとありがたいです。
どうぞよろしくお願いします。

Re: ポインターってどんなときに使うの?

Posted: 2013年8月14日(水) 20:46
by softya(ソフト屋)
分かりやすい例はソートとかキューで高速な処理ができるよって事ですが、不定長なものが扱いやすいとか、関数ポインタでswitch~caseを排除できるとか、違うデータを同じ関数で処理する時に便利など色々あります。もっと高度な使い方もありますよ。

 難しいけど参考に。 ↓
「ポインタを使ったデータ構造」
http://wwws.kobe-c.ac.jp/deguchi/c/list/frame.html

Re: ポインターってどんなときに使うの?

Posted: 2013年8月14日(水) 21:47
by taketoshi
私はローカル変数を別の関数で弄る時によくポインタ渡しをします。
クラスを生成するときも、newしてからポインタで受け取ります。
SRPGを趣味で制作していますが、ポインタ使わないと見通しが悪いソースが出来上がりそうです。


ローカル変数をポインタ渡しする例

コード:

#include "stdafx.h"
 
typedef struct{
int x,y;
}position;
 
/*構造体のポインタを受け取って直接書き換える関数*/
//リターンも使わないのでvoidを宣言する
void returnstruct(position *lpPos){
 
    //ポインタを受け取って書き換えるのでtempは不要
    //position temp;
     
    //直接書き換える(ここはポインタ経由でアクセスするのでアロー演算子を用いる、アロー演算子がポインタ演算子(*)を兼ねる)
    lpPos->x = 100;
    lpPos->y = 200;
     
    return;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    position pos;
     
    //関数に構造体のポインタを渡す
    returnstruct(&pos);
 
    //posに値がセットされている(ここは構造体にアクセスするのでドット演算子を用いる)
    printf("x = %d,y = %d\n",pos.x,pos.y);
     
    return 0;//←ここでpos変数は消滅する
 
}

Re: ポインターってどんなときに使うの?

Posted: 2013年8月14日(水) 22:03
by なりすけ
う〜ん、なるほど!
では、データー量が多いときに使うという認識でいいのでしょうか?

Re: ポインターってどんなときに使うの?

Posted: 2013年8月14日(水) 22:22
by softya(ソフト屋)
なりすけ さんが書きました:う〜ん、なるほど!
では、データー量が多いときに使うという認識でいいのでしょうか?
どちらかと言うと現代のプログラミングでは
・ポインタを使えば、わかり易く記述出来る場合がある。
・カプセル化(外部に情報を隠蔽)する効果を狙って使う場合がある。
・可変長データの構造を扱える。
などが主体で、高速化やメモリの効率化は必要に応じてっ所でしょうか。

Re: ポインターってどんなときに使うの?

Posted: 2013年8月14日(水) 22:51
by なりすけ
なかなか難しいですね......
私が使っている参考書だとひっきりなしにポインターが出てくるもんなので...
これから、ポインターを集中的に勉強します。

ありがとうございました。