- 1 名前:デフォルトの名無しさん [2007/10/24(水) 04:07:56 ]
- なんと!意外にもスレが無かったので立ててみました
先日のソフトウェア開発技術者試験午後UのB木のポインタ表現 近年の基本情報技術者試験の午後C言語問題の自己参照構造体 など物凄く出来が悪いです。 ゆとり?文系?自作減少? ブラックボックス化されてメモリ管理やコンピュータの細かい知識が不要となった? 本当にポインターは必要なのか!?議論しましょう
- 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 ]
- 言語仕様上可能だからってやるやつも始末悪い
- 525 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 08:10:57 ]
- Cでは明示的なアドレス演算がないとプログラムが書けないだけのこと。
- 526 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 12:49:27 ]
- Cを10年やってきた俺が断言しよう。
ポインタのないC#が理想系にもっとも近い。 C++のように氾濫するライブラリを使いこなすためにキャストの嵐もないし。
- 527 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 13:05:36 ]
- 俺もそう思うー
- 528 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 13:10:45 ]
- C++を10年やってから言ってください^^
- 529 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 13:12:10 ]
- aho
- 530 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 14:18:08 ]
- C++も2〜3年はやってるがこんな扱いづらい言語はないよ。
自分で一から作るならいいけど、実際の現場じゃ色んな人が触ったソースも 見なきゃならないわけで、当然のように色んなライブラリが使われてる。 次から次へと覚えることが多すぎてヘボな俺の頭はついてけないぜ。 あとC++は文字列だけを見てもCString、std::string、System::String*、TCHAR*、WCHAR*、 CAtlString、BSTR、CComBSTRなどなど。おぞましいほど多様な形態がある。 C#だと、ほぼstring型で統一されてるだがなぁ。 C++は使い古されてもうカオス状態。言語としては何でもできる良い言語だけど 俺はもう嫌だ。ボスケテー
- 531 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 18:54:21 ]
- >>おぞましいほど多様な形態がある。
それはC++のせいではない。 そこの区別がつかないようでは(略
- 532 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 19:00:49 ]
- CLI(笑)
- 533 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 20:26:42 ]
- C++は
- 534 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 20:38:54 ]
- その中でC++の文字列型と言えるのはstd::stringだけじゃねぇ?
- 535 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 20:56:17 ]
- まぁ C++ は歴史も引きずってて自由でやり放題だからな…
自分でさらっと書くのには Java とかより楽で好きだけど、 他人のコードには手を入れたくないな。
- 536 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 21:32:12 ]
- おまえのも他人からそう思われてるよ
自分のが一番綺麗だと思ってるうちはまだまだ未熟
- 537 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 22:04:30 ]
- そういうカオス領域の扱いに長けているのがC++だと思っている。
- 538 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 22:28:55 ]
- >>536
別にきれいだと思っているとは書いていないよ。勉強して努力はしているが。 できるだけ自分で責任を持って直したいと思ってる。
- 539 名前:デフォルトの名無しさん [2007/11/29(木) 22:36:54 ]
- ポインタと関係ないですが
- 540 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 01:39:03 ]
- 趣味でオナニープログラムして楽しむならC++だな。
仕事では、使いたくねぇ
- 541 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 02:52:10 ]
- >>539
ポインタを語るスレではないからな そもそも学びたい奴がいないならこのスレいらんだろ ポインタがわからんやつとかいないじゃん
- 542 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 13:07:43 ]
- ポインタをどうやって学ぼうかってスレなんだから
ポインタわかんない人も来るだろw
- 543 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 17:01:39 ]
- ポインタ勉強中でなんとなく面白くなってきた
関数は常に値渡し 参照渡しでも結局はアドレスと言う値を渡してるに過ぎない って認識であってる?
- 544 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 17:06:45 ]
- うん
- 545 名前:デフォルトの名無しさん [2007/11/30(金) 19:29:27 ]
- C言語は値渡ししかできない、でいいんですよね?
- 546 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:34:13 ]
- 今更Cやポインタなんて勉強してるやつはバカだろw
言語なんて勉強する意味がない。 コーダーは中国から買ってくれば良い
- 547 名前:デフォルトの名無しさん [2007/11/30(金) 19:38:14 ]
- そうして中国に追いつかれることに気付かない日本人。
私は自分のためにCやポインタを勉強する。
- 548 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:40:59 ]
- お前がバカなんだっつの
- 549 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:41:40 ]
- まともなコードが書けない奴が、まともな設計できるわけねえし
|

|