- 1 名前:デフォルトの名無しさん [2007/10/24(水) 04:07:56 ]
- なんと!意外にもスレが無かったので立ててみました
先日のソフトウェア開発技術者試験午後UのB木のポインタ表現 近年の基本情報技術者試験の午後C言語問題の自己参照構造体 など物凄く出来が悪いです。 ゆとり?文系?自作減少? ブラックボックス化されてメモリ管理やコンピュータの細かい知識が不要となった? 本当にポインターは必要なのか!?議論しましょう
- 424 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:03:53 ]
- Javaにもポインタってあるんですか?
- 425 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:06:45 ]
- >>421
ちげーよ、安全に使えるようになってるから理解しやすいかと思ったんだよ。
- 426 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:06:59 ]
- ポインタと再帰はあんまり関係なくね?
- 427 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:07:34 ]
- >>424
ヒント:ぬるぽ
- 428 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:08:29 ]
- >>424
ポインタは無いよ
- 429 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:11:19 ]
- >>420
アセンブラは良く知らんが同意 >>421 趣味でちょっとしたTCP/IPプロトコルを実装しているんだが ポインタがないと俺には無理ってぐらいだ こんなものをC#とかJavaとか他の言語でどうやって書けと(ry ポインタとmemcpyを使ってソース書くときれいになって読みやすくなってるぞ
- 430 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:13:31 ]
- C#にポインタはあるよ
- 431 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:15:32 ]
- C脳から抜け出せてないのやら他言語に疎いのやら
- 432 名前:429 mailto:sage [2007/11/14(水) 18:15:35 ]
- >>430
あれは紛い物
- 433 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:22:26 ]
- どういう点が?
- 434 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:23:12 ]
- ポインタだけに点
- 435 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:29:18 ]
- これはいい脱力感
- 436 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:37:23 ]
- わふ?
- 437 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:10:45 ]
- >>432
結局根拠無し?
- 438 名前: mailto:sage [2007/11/16(金) 00:10:00 ]
- アセンブラ役にたたんかもしれんが
理解を深めるには結局は近道だと思われ
- 439 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 07:30:47 ]
- ポインタの理解には、メモリとアドレスについて知れば十分。
インストラクションコードの知識が必要になるのは、もっとずっと後。
- 440 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 08:37:13 ]
- 絶対アドレッシングと相対アドレッシングまで押さえれば完璧
- 441 名前:デフォルトの名無しさん [2007/11/16(金) 09:11:57 ]
- //
- 442 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 21:44:40 ]
- い・・・いんす・・・とらく・・・?
- 443 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 02:40:14 ]
- たー・・・のお・・・ね・・・えちゃん・・・?
- 444 名前:デフォルトの名無しさん [2007/11/17(土) 06:48:29 ]
- ハンドアセンブルで COM ファイルを書いてみる。
- 445 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 07:24:47 ]
- ORG 100
- 446 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 07:32:12 ]
- ハンドアセンブルが許されるのはZ80までだよねー(AA略
- 447 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 10:52:54 ]
- 全てのものはメモリ上においてあって、位置はアドレスで示せて、ポインタはアドレスを入れる変数、
でいいんじゃね?
- 448 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 12:01:50 ]
- ポインタの「型」を忘れるなと何度言ったr
- 449 名前:デフォルトの名無しさん [2007/11/18(日) 12:56:38 ]
- ?
- 450 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 14:15:25 ]
- エスパーのおれが解説を試みてみる
char *cp; int *ip; /* いろいろやる */ cp++; ip++; の最後の2行の挙動が>>447には含まれてないってことじゃね?
- 451 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 14:37:46 ]
- なるほど。ご指摘&解析ありがとう。
では447の補足。 ポインタには加算減算が定義されている。加算結果のアドレスがいくつ増えるかはポインタの型に依存する。 intが4バイトの処理系でintのポインタに+1するとアドレスは4バイト移動する。 これはメモリ上の連続領域にかかれたintデータにアクセスする際に便利。 ぜんぜんわかりやすくないな。サーセン。
- 452 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 14:39:50 ]
- なるほど。ご指摘&解析ありがとう。
では447の補足。 ポインタには加算減算が定義されている。加算結果のアドレスがいくつ増えるかはポインタの型に依存する。 intが4バイトの処理系でintのポインタに+1するとアドレスは4バイト移動する。 これはメモリ上の連続領域にかかれたintデータにアクセスする際に便利。 ぜんぜんわかりやすくないな。サーセン。
- 453 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 14:40:05 ]
- 加算減算に触れるのには相対アドレス絶対アドレスみたいなのも理解が必要だと思うけど
こういう仕様が表に出ている事のメリットがいまひとつわからない
- 454 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:10:32 ]
- >>447
厳密に言うとメモリ上にない変数もあるのだ、ふっふっふ。
- 455 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:25:00 ]
- レジスタ上ってこと? 確かに忘れてた。ご指摘感謝。
まぁポインタの話をするときはメモリ上って事でいいのでは?
- 456 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:26:36 ]
- いまレジスタってあるの?
- 457 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:12:24 ]
- あるよ、何言ってるんだ?
- 458 名前:デフォルトの名無しさん [2007/11/18(日) 16:28:51 ]
- 全然意識したことないや
- 459 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:34:56 ]
- じゃあ
register int i; &i; ってやってみるといいよ。コンパイラに怒られるから。
- 460 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:50:18 ]
- C言語に register はあるけど、どう扱うかはコンパイラ任せ
じゃない?実際任せるしか無いと思うけど。多少配慮は してくれるはずだが、下手するとかえって遅くなる場合もある。 CPU 上の話はまたそれはそれで違うよね。
- 461 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 17:48:35 ]
- レジスタ増えすぎだし人間が管理するより任せた方がいいわな
高級言語でわざわざ意識する機会なんてまず無いわ
- 462 名前:デフォルトの名無しさん [2007/11/18(日) 17:50:14 ]
- registerなんてもう10年位使ってない
- 463 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:26:58 ]
- ま、今時register修飾なんか無視するコンパイラがほとんどだよね。
ただしアドレスだけは取れないようになっている。
- 464 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 21:02:19 ]
- そういえば俺も 10 年以上前にどの変数を register 宣言すると速くなるか、
とか一所懸命自分のコードで調べてた覚えがあるな。けどもうずっと使って なくてコンパイラ任せ。
- 465 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 16:08:13 ]
- registerを使わなきゃならんような場面、今後はもうないだろうね。
少ない資源で必死に高速化してた頃が懐かしす。
- 466 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:48:31 ]
- 組み込み系ではまだ、たまに使う場面あるけどね。
- 467 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 15:31:11 ]
- regster使うくらいだったら、自分がアセンブリ言語で書いたほうがいいと考えてしまう。
- 468 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 16:32:17 ]
- &使わないループ変数には付けときゃいいんだよ。
レジスタが空いてないなら勝手に使われないだけなんだから。
- 469 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 16:41:02 ]
- そういうど素人なコードは書きたくないなあ。
組み込み系だったらつけるのはわかるけど、 それ以外だったら間抜け以外の何物でもない。 下手したらオプティマイザーを混乱させてかえって遅くなることもあるし。 つっても今の処理系だったらみんな無視するだろうから大丈夫とは思うけど。 なので場所を弁えずregister修飾入れているやつはど素人。
- 470 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 16:44:13 ]
- >>468
逆!逆!よっぽどの理由がない限りつけないのが普通だってば
- 471 名前:デフォルトの名無しさん [2007/11/21(水) 18:50:12 ]
- アドレスを取られたく無い時ぐらいしか思い付かん
- 472 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:08:20 ]
- アドレスを取られたくない時ってのが思いつかん
- 473 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:39:28 ]
- gnuのソースなんか付けまくりだぜ
- 474 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 20:23:13 ]
- 太古のソースを後生大事に保持してるからねえ
- 475 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 22:12:01 ]
- 今時のコンパイラなら謹んで無視するだろ。
- 476 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 22:21:49 ]
- C++ならregister変数でもアドレス演算子が使えた気がする。
- 477 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:45:17 ]
- 最適化なんてコンパイラにやらせときゃいいのさ。
いろんな環境に移植するソースで、いちいちregister付けたり 外したりなんて馬鹿らしくてできん。
- 478 名前:デフォルトの名無しさん [2007/11/25(日) 13:08:45 ]
- Cでヌルポが(void *)0ってマクロ定義される理由が分からん。
C++では、「ヌルポを(void *)0って定義してはダメ」って記述されてる 本があるけど、その理由も分からん。 結局、ヌルポは、どう理解しておいたらいいのだ? Cでは、ヌルポの型は、(void *)なの? C++では、ヌルポの型は、なんだ?
- 479 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:24:31 ]
- C++の本の方は(void *)型の話じゃなくて
0がダメって言ってるだけじゃないの? C自体も0とは定義してないはず 型は・・・どうなんだろう 強いて言えばvoid *型な気がするけど
- 480 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:50:17 ]
- NULLは0じゃない。0がNULLなんだ。
この法則に則って考えれば、NULLはCでもC++でも0と定義されるべきであり、それ自体は8進定数と言うことになる。
- 481 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:55:36 ]
- >>478の論点は「型は、なんだ?」だと思うが・・・
ちなみになんで8進?
- 482 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:14:33 ]
- ポインタくらい簡単なものが一般的に「ポインタが難しい」とされてるおかげで、C始めたばっかの人が「ポインタが理解できません」と言ってくれるので(難しいとされているので躊躇せずに言いやすい?)面接のときのモグリ排除に大いに役に立っている。
- 483 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:16:21 ]
- それを考えて新人に特別な扱いせずに
普通に変わった変数としてポインタ教えてたら やっぱり2年目になっても分かってなかった
- 484 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:16:55 ]
- 0で始まるから8進数。
- 485 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:17:15 ]
- ポインタって精々理系にとっての微分積分程度のレベルでしょ
- 486 名前:デフォルトの名無しさん [2007/11/25(日) 14:21:10 ]
- 16進は0から始まりませんか?
- 487 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:22:53 ]
- >>485
いや、分数の割り算程度でしょ
- 488 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:24:09 ]
- 微積分マスターよりポインタマスターの方が数段楽。覚えなきゃいけない事項の絶対量が少なすぎる。
- 489 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:27:41 ]
- ポインタって何を覚えるんだ・・・
- 490 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:31:09 ]
- ポインタ(の存在意義)がわかりませんって面接で言ったらなにがわからないのか聞いてくるから
とくとくと語ってみたら面接官涙目になってた。
- 491 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:32:16 ]
- 面接官って技術者の人やってんのかー
ウチの会社は総務だか人事だかがやってたなぁ・・・
- 492 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:44:45 ]
- ポインタがわからないって、ものごとの裏側(仕組み)が
どうなってるのか少しも考えてこなかった証拠じゃね? コンピュータの中で関数がどうやって呼び出されてるのとか、 変数はどうやってわたされてるのとか、 時計の針はどうやってまわるのとか、 えんぴつとか棒付きアイスはどうやってつくるのとか 普通は自分なりに考えてみるものじゃん
- 493 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:46:38 ]
- 赤ちゃんはどうやっ(ry
- 494 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:57:32 ]
- >>492
そうやって裏側の裏側の裏側の……って調べていくとキリがないので、 あるところで計算を打ち切ってcall-by-needで遅延的な思考をすることだってあろう。 そのためにいろんな学問やら処理系やらは多層構造になってるし、 インターフェースが決まってれば実装が見えなくたってかまわないんでしょうよ。 コンピュータをやるなら最低でもアセンブラとかマシン語が云々、とかいう人はそこが分かってない。
- 495 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 15:03:53 ]
- このスレポインタスレだからしょうがないかと思っていた
- 496 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 15:19:54 ]
- アセンブラ出身の俺からみてポインタはなんであんな面倒な仕組みなのか理解できないよ。
- 497 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 15:21:36 ]
- おっちゃん乙
- 498 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 15:26:45 ]
- >>494
違うんだ 具体的な仕組みを正確につきとめるというより 少なくとも自分のなかでつじつまが合うように モノゴトの裏側を想像するってこと 抽象化して考えることが出来る奴は、少なくとも 具体の一例を想像して挙げてみることができると思う
- 499 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 15:38:00 ]
- 合理的に考えられる奴ならポインタのおかしさ、不自然さに気づくだろうよ
- 500 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 15:39:28 ]
- >>478
ぬるぽは、あらゆるポインタ型について存在する。 int*のぬるぽ、void*のぬるぽ、char*のぬるぽ、void(Foo::*)(void)のぬるぽ・・・ 定数「0」は任意の型のぬるぽに暗黙に変換できるので、NULLマクロを0と定義しているのは妥当。 単なる0でなく(void*)0と定義してる場合もあるが、その理由は、単なる0は整数型にもなるので、 char c = NULL; と書くバカがしばしば現れるため。 (void*)0は整数型としては通らないので、これで一応そういうバカを少しは防げる。 Cではvoid*はあらゆるポインタ型に暗黙に変換できるので、これでも特に問題はない。 C++ではvoid*の暗黙の変換が無くなったので、(void*)0をNULLの定義には使えなくなった。 つまり例えば int *p = (void*)0; というのはCでは通るがC++では通らない。
- 501 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:08:17 ]
- >>486
16進定数は0xで始まらないといけないので、数値0をあらわすには0x0とする必要がある。
- 502 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:58:23 ]
- >>499
kwsk
- 503 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:59:57 ]
- kwsk聞いたら宣言の話だった、というのは無しにしてほしい。
- 504 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 18:00:50 ]
- 8進の0って表記では00じゃないの?
- 505 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 18:33:06 ]
- どっちでも一緒だからどうでもいいよ、ポインタと関係ないし
- 506 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:31:04 ]
- 世の中にポインタと関係ないものなんてないよ
- 507 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 22:59:05 ]
- Javaにはポインタは存在しないのに
なぜ NullPointerException が出てくるんですか?
- 508 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 23:03:29 ]
- 語呂がいいから
- 509 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 23:12:29 ]
- >>507
ガッ
- 510 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 23:17:32 ]
- JavaにポインタがないこととJavaVMにポインタがないことは別だから。
- 511 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 18:22:20 ]
- ポインタがわからないという概念がわからない
- 512 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 20:19:17 ]
- 概念は分かるけど、使い方が難しい、使いどころが分からないってことなんだろう多分
- 513 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 23:54:11 ]
- 同じことをするのに何通りも方法があるのが混乱のもと。
- 514 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:38:36 ]
- だから、バカ用言語のjavaが出来たのだよ
- 515 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:53:01 ]
- 同じ著者?のExcelのVBAの本はわかりやすいのに
こっちは結局よくわからんかった。著者はCを知らないっぽ www.amazon.co.jp/product/dp/4798011924
- 516 名前:デフォルトの名無しさん mailto: sage [2007/11/27(火) 13:53:19 ]
- Javaは単に見えなくしてるだけじゃないのか?
- 517 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 16:40:33 ]
- Javaは全部ポインタなのさ。
- 518 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:44:39 ]
- プリミティブ型はポインタがない。
かつ、オブジェクトでも明示的なアドレス演算ができないという意味では ポインタとしては不完全。
- 519 名前:デフォルトの名無しさん [2007/11/27(火) 21:33:49 ]
- ぷ・・・ぷれみあむがた?
- 520 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 21:37:37 ]
- アドレス演算なんかあってもしょーがない
- 521 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 00:47:47 ]
- しょうがないというかJavaにはその概念がないんだからできなくて当然だ。
- 522 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 01:33:43 ]
- できないからやれないのとできるけどやらないのとの間には越えられない壁がある
- 523 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 01:39:01 ]
- できないけどやるやつが始末悪い
- 524 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 07:01:35 ]
- 言語仕様上可能だからってやるやつも始末悪い
|

|