はじめまして、「なりすけ」というものです。
C言語の勉強中のものなのですがまだ小さなプログラムしか書いた事がありません。
具体的にはジャンケンとかFizzBuzzとかです......
それで今ポインターの単元に入ったのですが、あまり深く理解ができません。
まぁ、便利なんだなぁとは思うんですが、先に書いた通りまだ小さなプログラムしか書いた事がないのでどんなときに便利なのかとかがよくわかりません。
なので、ポインターってどんなときに使われてるのかを教えて頂くとありがたいです。
どうぞよろしくお願いします。
ポインターってどんなときに使うの?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: ポインターってどんなときに使うの?
分かりやすい例はソートとかキューで高速な処理ができるよって事ですが、不定長なものが扱いやすいとか、関数ポインタでswitch~caseを排除できるとか、違うデータを同じ関数で処理する時に便利など色々あります。もっと高度な使い方もありますよ。
難しいけど参考に。 ↓
「ポインタを使ったデータ構造」
http://wwws.kobe-c.ac.jp/deguchi/c/list/frame.html
難しいけど参考に。 ↓
「ポインタを使ったデータ構造」
http://wwws.kobe-c.ac.jp/deguchi/c/list/frame.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ポインターってどんなときに使うの?
私はローカル変数を別の関数で弄る時によくポインタ渡しをします。
クラスを生成するときも、newしてからポインタで受け取ります。
SRPGを趣味で制作していますが、ポインタ使わないと見通しが悪いソースが出来上がりそうです。
ローカル変数をポインタ渡しする例
クラスを生成するときも、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変数は消滅する
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: ポインターってどんなときに使うの?
どちらかと言うと現代のプログラミングではなりすけ さんが書きました:う〜ん、なるほど!
では、データー量が多いときに使うという認識でいいのでしょうか?
・ポインタを使えば、わかり易く記述出来る場合がある。
・カプセル化(外部に情報を隠蔽)する効果を狙って使う場合がある。
・可変長データの構造を扱える。
などが主体で、高速化やメモリの効率化は必要に応じてっ所でしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ポインターってどんなときに使うの?
なかなか難しいですね......
私が使っている参考書だとひっきりなしにポインターが出てくるもんなので...
これから、ポインターを集中的に勉強します。
ありがとうございました。
私が使っている参考書だとひっきりなしにポインターが出てくるもんなので...
これから、ポインターを集中的に勉強します。
ありがとうございました。