[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 19:54 / Filesize : 171 KB / Number-of Response : 914
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ポインタはどうやって学ぶべきか



1 名前:デフォルトの名無しさん [2007/10/24(水) 04:07:56 ]
なんと!意外にもスレが無かったので立ててみました

先日のソフトウェア開発技術者試験午後UのB木のポインタ表現
近年の基本情報技術者試験の午後C言語問題の自己参照構造体
など物凄く出来が悪いです。

ゆとり?文系?自作減少?
ブラックボックス化されてメモリ管理やコンピュータの細かい知識が不要となった?

本当にポインターは必要なのか!?議論しましょう

151 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 04:42:12 ]
「ダブルポインタ」っていうのは素人が使う言葉


152 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 11:51:23 ]
「ダブルポインタ」「ポインタのポインタ」
なんて呼び方はやめて普通に
「ポインタへのポインタ」
って呼べばいい

という主張をどこかで見たな

153 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 12:36:52 ]
素人は「ダブルポインタ」なんて知らんだろ

154 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 12:47:29 ]
参照とダブルポインタは違うよね?

155 名前:デフォルトの名無しさん [2007/11/03(土) 14:01:21 ]
問題は「ダブルポインタ」と言ってしまうと
「配列へのポインタ」と「ポインタへのポインタ」の
どっちの話をしているのかが決まらないまま話が進むこと

だから素人同士の会話でしか使われない表現ということ


156 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:01:35 ]
ダブルポインタなんて2chでしか貴下ねーな

157 名前:デフォルトの名無しさん [2007/11/03(土) 14:03:22 ]
補足

× 問題は「ダブルポインタ」と言ってしまうと

○ 問題は「char **p;」の表記だけを見て「ダブルポインタ」と言ってしまうと



158 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:09:53 ]

ちょっと暇つぶししてみた

ダブルポインタ に一致する日本語のページ 約 3,040 件
ポインタのポインタ に一致する日本語のページ 約 9,800 件
配列のポインタ に一致する日本語のページ 約 672 件
ポインタへのポインタ に一致する日本語のページ 約 616 件
配列へのポインタ に一致する日本語のページ 約 14,800 件

最近はブログのせいでごみばっかり引っかかるようになってしまった
と言っても以前はマニュアルのコピーばっかり引っかかってた訳だが



159 名前:デフォルトの名無しさん [2007/11/03(土) 14:13:28 ]
そもそも重複スレだし
pc11.2ch.net/test/read.cgi/tech/1171172537/49-



160 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:15:27 ]
(T** a)みたいにするんじゃなくて
(T* *a)にしたら少し理解しやすくなったかもしれないこともなかったような気がした

161 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:19:18 ]
左の * と 右の * はどっちが優先度高いんだっけ?


162 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:20:59 ]
char str[256];
char *p;
p = str;

163 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:21:07 ]
漏れがCやり始めた頃はダブルポインタなんか言ってる香具師は一人もいなかったな
だれが流行らせたんだ?メジャーな入門本に書いてあるのか?

164 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:22:54 ]
>>163

int *p; イントポインタ
double *q; ダブルポインタ

これをだれかが間違って解釈して
馬鹿の間で蔓延したと思われ


165 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:24:54 ]
それは確かにダブルポインタwwwww

166 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:28:21 ]
>>164
それ見てダブルポインタなんてアホな呼び方してるのは
日本人だけだろうと思って調べてみたが
毛唐の間でも普通に使われてるのな
double *p;
int **p;
両方の意味でw



167 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:30:24 ]
>>157
char **p;
と書いて配列へのポインタと解釈することなんてありえるか?
配列へのポインタといったら
char (*p)[N];
じゃないのか?

168 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:31:55 ]
>>167

int main(int argc, char **argv)


169 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:32:28 ]
ちなみにmeta-pointerって呼び始めたのは俺。
MITで今じゃ完全に定着しているって後輩が言ってた。



170 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:32:48 ]
>>168
それはポインタの配列


171 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:37:23 ]
配列のポインタとポインタの配列は区別しようぜ

172 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:45:37 ]
馬鹿が馬鹿に説教するスレはここですか?


173 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:48:52 ]
>>171
ポインタの配列とダブルポインタの区別はしなくても平気ですか?


174 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:48:53 ]
馬鹿じゃないよ
C言語は得意だけど日本語が苦手なだけだよ

175 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 15:16:47 ]
double *pは「double型へのポインタ」だろ。そうとしか読めない。

176 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 15:18:28 ]
ダブルポインタって言葉をほとんど聞いたことが無い

177 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 15:27:47 ]
俺はある

178 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:10:38 ]
二重ポインタならよく聞くけど、ダブルポインタは滅多に聞かないな。

179 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:23:17 ]
二重ポインタは初耳
ポインタへのポインタばっかり



180 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:40:33 ]
今の今までインディレクトポインタと呼んでいたぞ。

181 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:48:30 ]
昔、面接で「ダブルポインタはOKですが、トリプルポインタは自信がありません」と言った香具師がいた。
案の定、ポインタを理解していなかった。

182 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:52:53 ]
pc11.2ch.net/test/read.cgi/tech/1171172537/49

183 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:53:31 ]
pc11.2ch.net/test/read.cgi/tech/1171172537/52

184 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:55:27 ]
そうだ。ダブルポインタとはdouble*のことに違いない。

185 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:00:19 ]
ポインタへのポインタへのポインタは使ったことがない気がする

186 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 01:59:00 ]
*** は滅多に使わないけど全く使わないということはない
ただそういうときには typedef するか struct になってることの方が多い


187 名前:デフォルトの名無しさん [2007/11/04(日) 06:03:01 ]
>>186
使い道が想像できん。

188 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:44:18 ]
>>187
行列の配列とか?

189 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 12:25:14 ]
3次元の配列の動的確保



190 名前:デフォルトの名無しさん [2007/11/04(日) 13:17:16 ]
文字列の二次元配列を使おうとしたときに
どうすればいいか分からなかった漏れが来ましたよ


191 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 13:32:29 ]
char Array[32][16];

192 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 13:34:02 ]
>>191
いやそれ文字列になってないw

193 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 13:35:08 ]
文字の二次元配列だな

194 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 13:50:07 ]
std::vector<std::vector<std::string> > Array;

195 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 13:51:26 ]
>>192-193
/(^o^)\

196 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:13:34 ]
std::vector<std::vector<std::string *> *> *Array;

197 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:38:22 ]
std::vector< tr1::shared_ptr< std::vector< tr1::shared_ptr< std::string > > > > ary;

198 名前:デフォルトの名無しさん [2007/11/04(日) 20:31:42 ]
ベクター

199 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:32:50 ]
ベクトル



200 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:34:06 ]
う゛ぇくとぉ

201 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:40:22 ]
typedef char *string;
string Array[32][16];
/* 200 get */

202 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:16:19 ]
え?

203 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 00:40:49 ]
ウルトラ警備隊に聞いてみろ

204 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:07:41 ]
ポインタを理解できない人は、C言語 ポインタ完全制覇を読みなさい。
それでも、わからなければ・・・・
私は知らん。

205 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:29:37 ]
>>204
あれはいいものだ・・・

206 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 07:48:59 ]
考え方や概念よりも、文法がややこしいんだと思うよ。
変数に成り代われるのは演算子のおかげであって、ポインタ自体はアドレスを指すことしか出来ないんだから。

207 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 12:15:17 ]
ああ、ポインタの概念自体をさっぱり理解できない人はまずいない。
演算子の扱いとか、関数の引数や戻り値としての扱いとか、直観に反する振る舞いをするのでつまづく。

208 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 14:27:35 ]
滅茶苦茶直観的だけど

209 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:33:15 ]
ここに書いてあったので「へー、ダブルポインタって呼ぶんだ、初めて聞いたな」と思ってダブルポインタと早速呼称してたorz



210 名前:デフォルトの名無しさん [2007/11/05(月) 19:02:30 ]
ポインタなんて、実はだだの正数値が入ってる変数なんです
変数と知れず変数を指し示す物と考えると理解が難しいのかもしれません

int a;
int *p;
p = &a;
*p = 10;
printf("%d",a);
結果:
10

普通はやりませんが以下の様に正数型をポインタとしても使えます

int a;
unsigned int p;
p = (unsigned int)&a;
*(int*)p = 10;
printf("%d",a);

結果:
10

このようにキャストをしっかりしてやれば代用が利いたりします

でも、64ビットOSだとこれは変更が要りますが64ビットOSはポインタのサイズが32ビットが64ビットの正数型になるだけなので64ビット長の正数型を用意するだけで良いだけのことですけどね

211 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:33:55 ]
処理系依存なことを言語仕様に定められてるかのように書くなよ・・・

212 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:43:46 ]
>>210
そもそも正数っていうのは0より大きい実数のことであって、
unsigned intっていうのは0以上の整数のことであるわけだが。

213 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:48:18 ]
>>212
それ自然数

214 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:49:06 ]
じゃなくてあってんのか。
まあいいや。

215 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 20:07:26 ]
というかこんなことが出来たとして何の役に立つの?

216 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 20:56:27 ]
出来ない奴が役に立たない

217 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:15:37 ]
ポインタをintにキャストする人は役に立つんだね
知らなかったよ

218 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:24:33 ]
俺は知ってた

219 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:55:12 ]
過去に一回だけそんな使い方をしたことあるな・・・
なんでそれをやったかは忘れた



220 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:11:37 ]
ポインタ値の配列の宣言がわからなくてintの配列で代用した

こんなあたりだろ




221 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:14:25 ]
ポインタの配列ってこうでいいんじゃないんですか?
int* pointa[10];

222 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:16:26 ]
確かにそうだが変数名が気に入らないw

223 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:39:02 ]
>>222

気にしては駄目だw

224 名前:デフォルトの名無しさん [2007/11/06(火) 00:52:22 ]
ポインタの配列
int* ponta[10];

int配列へのポインタ
int(* ponta)[10];

でいいんですよね?

225 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:55:41 ]
int[]型みたいなのが無いから書き方がカオスだな

226 名前:デフォルトの名無しさん [2007/11/06(火) 00:58:13 ]
ポインタの文法を学ぶ前になんでポンタが必要かを理解させないから苦労して学ぶ気になれないのでは
なんで?最近の言語はコンパイル時に勝手に最適化してくれるんじゃないの?

WEB系ではいらない?
汎用系では?
制御・ファーム・ハード系では?
ソフト系では?

227 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:59:50 ]
『昔のPC・OSではな〜メモリが64KBしかなくてな〜』とか言う懐古厨はお断り

228 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:06:17 ]
最近の若い子はなんでも参照で済ますから・・・

229 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:08:29 ]
>>224
たしか、それでおkなはず



230 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 02:56:11 ]
int a;
double *p;
p = (double *)&a;
*(int*)p = 10;
printf("%d",a);

結果:
10

231 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 03:39:01 ]
当たり前って言えば当たり前

232 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 08:32:43 ]
>>230
それは流石に駄目だろう
多分、出来なくはないだろうけど浮動小数点数の演算が適応されないポインタに対してこれはナンセンス過ぎないか?

233 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 11:10:25 ]
int a;
double p;
p = (double)&a;
*(int*)p = 10;
printf("%d",a);

結果:

>>232
これと勘違いしてない?

234 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 11:42:39 ]
>>230
色々怖いな。

235 名前:>>232 mailto:sage [2007/11/06(火) 13:52:26 ]
>>233
見間違えサーセンw

236 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:59:59 ]
sizeof(int*) <= sizeof(double*)な処理系じゃないとダメじゃね?
まあこれを満たさない処理系なんてあるのか知らないけど

237 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:17:15 ]
>>236
いろいろわかってなさ杉

238 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:29:44 ]
初心者だけど

>>233
のコードが実行できると
どっかのメモリに10が代入されるってことなのか?

239 名前:236 mailto:sage [2007/11/06(火) 15:34:16 ]
>>237
ポインタのサイズは指している型に関わらず同じ、なんてことは無かったような気がするんだけど
間違ってる?



240 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:34:21 ]
aに10が入る

241 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:37:47 ]
>>239
ポインタはint型のサイズと同じって記憶があるけど。

242 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:37:55 ]
>>239
ポインタのサイズが型によって違う処理系教えてくれ

243 名前:デフォルトの名無しさん [2007/11/06(火) 15:47:56 ]
>>238
doubleにintポインタのアドレスを入れるけど、
doubleの値をintポインタにキャストしてるから、
結局int aに値を入れてるのと同じ。

244 名前:デフォルトの名無しさん [2007/11/06(火) 15:48:44 ]
>>243
語弊があるな、intのアドレスをdoubleの値に入れる。かな

245 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:55:40 ]
>>243
なるほどね、読み返して見たら納得できた。

246 名前:236 mailto:sage [2007/11/06(火) 16:24:31 ]
どっかで見た気がしたんだが記憶違いだったか
しかし、void*とかmallocとか考えるとありえないなorz
スレ汚しすまんかった

247 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 16:48:26 ]
>>241
それはない

248 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 16:59:09 ]
>>241
そういう場合もある

249 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 18:25:36 ]
現状そういう処理系が実在しないにしても
規格上はint *とdouble *が安全に変換できるとは限らない
void *を介しても同じ事



250 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 18:37:14 ]
昔々、ポインタにはfarとnearがあっての…

251 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:33:07 ]
ポインタなんて今時覚える必要ないと思う。
C#とかポインタを気にせずプログラミングできる言語が主流になりゃいい。
今後PCはどんどん高性能化していって統合環境が整うんだからポインタみたいな
危険な構造、なくしてけばいいよ。
そういうのはコンパイラに任せとけ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<171KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef