- 1 名前:デフォルトの名無しさん [2007/10/24(水) 04:07:56 ]
- なんと!意外にもスレが無かったので立ててみました
先日のソフトウェア開発技術者試験午後UのB木のポインタ表現 近年の基本情報技術者試験の午後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はどんどん高性能化していって統合環境が整うんだからポインタみたいな 危険な構造、なくしてけばいいよ。 そういうのはコンパイラに任せとけ。
- 252 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 21:20:12 ]
- 例えば貴方の身の回りの家電や車の制御プログラムにC#を入れるとな?
こういうマイコンは限られたメモリをいかに容量的に効率的に高速に使うかが大事
- 253 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 21:24:25 ]
- >>252
ただ現実にはそういう方向かもね。携帯とか Java 走ってる。 あと、C 使いこなすにはポインタ理解する必要はあるけど、 必要以上にポインタを使い回す事はない。パフォーマンスが 心配なら実際 profiling してから直すべき。 ついでに、あまり複雑なことをしなけりゃポインタも簡単。
- 254 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 22:10:34 ]
- Javaとかにも、配列の途中からを指す方法があればなあ
配列そのものと、何番目かをあらわすIndexと。二つ渡すのが非常にかっこわるい
- 255 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 22:13:04 ]
- SubList使えよ
- 256 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 22:36:26 ]
- 携帯Javaにはそんな便利なもんねえ
- 257 名前:デフォルトの名無しさん [2007/11/07(水) 06:26:59 ]
- >>251
C#、Javaはむしろポインタだらけじゃないか?
- 258 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 06:56:56 ]
- >>243
>doubleにintポインタのアドレスを入れるけど、 >doubleの値をintポインタにキャストしてるから、 >結局int aに値を入れてるのと同じ。 double*に入れるときは問題ないけど doubleに入れるときはアドレス値がdouble値としてふさわしくないときに 正規化されて他の正しい浮動小数点数に変換されるだろうから int*にキャストしたときには別の場所を指してる可能性があるね
- 259 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 07:39:19 ]
- そんな環境実際にあんの?
- 260 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 08:32:42 ]
- >>259
確かにその通り。正規化云々以前にポインタ値をdouble変数に入れられない。
- 261 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 08:39:01 ]
- どうせ二進表現の数なんだから、ビット幅さえ合えば入れられるんじゃないの?
数値としては別な物になるだろうけど。
- 262 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 10:38:38 ]
- >>261
つ[規格]
- 263 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 11:06:58 ]
- アセンブラをやれ でFA?
- 264 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 14:24:27 ]
- >>261
longに入れたりintに入れたりは幅だけ合ってれば出来るけど doubleの場合は規格化された値しか入れられないよ
|

|