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

このエントリーをはてなブックマークに追加
15デフォルトの名無しさん:2008/07/27(日) 18:01:53
■初級者シスアド丘
標高1000b

■基本情報山
標高2000b

■富士ポンタヶ岳
標高3776b

■ソフトウェア連峰
標高4000b

■アプリケーション山脈
標高6000b

■システムエベレスト
標高7000b

※三角点未設置
16デフォルトの名無しさん:2008/07/27(日) 18:03:03
■プール学院大学
標高00000b
17デフォルトの名無しさん:2008/07/27(日) 18:04:17
大学格付け決定版
http://www.geocities.jp/daigakuranking/index.html

Fa :朝日、中京学院、奈良産業、広島安芸女子、徳山、宮崎産業経営、帝京平成、駒沢女子北海道東海、東和、北海道文教、青森、弘前学院、仙台白百合女子、宮城学院女子、郡山女子、東京家政学院筑波
、駿河台、聖学院、敬愛、淑徳、和洋女子、相模女子、新潟国際情報、金城、岐阜聖徳学園、中部学院、静岡産業、中部、東海学園、平安女学院、大阪樟蔭女子、摂南、大手前、東北女子、東北生活文化、共愛学園前橋国際
、十文字学園女子、松蔭女子、金沢学院、東海女子、大谷女子、相愛、呉、四国、帝塚山、美作女子、九州ルーテル学院、尚絅

F :プール学院、東北文化学園、九州共立、高松、四国学院、苫小牧駒沢、桜花学園、倉敷芸術科学、くらしき作陽、比治山、いわき明星、奥羽、千葉商科、帝京平成、東洋学園、敬和学園、新潟産業、富士常葉
、愛知みずほ、常磐会学園、京都創成、英知、神戸山手、福岡国際、鹿児島国際
、鹿児島純心女子、稚内北星学園、東京純心女子、名古屋文理、鈴鹿国際、大阪国際女子、大阪明浄、沖縄、名桜、愛知文教、就実女子、志学館、高野山、宮崎国際、園田学園女子、山陽学園、上野学園
18デフォルトの名無しさん:2008/07/27(日) 18:05:11
人事<・・・についてグループディスカッションしてください。
      ∩___∩
    / ノ `──''ヽ  私はプール学院大学の・・・
    /      /   |         ∩___∩
   /      (・)   |       /      ヽ
__|        ヽ(_●       | ●   ●   |   うはwww低学歴Fラン乙www
   \        |Д|       | ( _●_)     ミ
     彡'-,,,,___ヽノ   ,,-''"彡 |∪| __/`''--、
  )     |@      |ヽ/     ヽノ ̄       ヽ
  |      |     ノ / ⊂)            メ  ヽ_,,,---
  |     .|@    | |_ノ  ,へ        / ヽ    ヽノ ̄
  |     |_   / /  | /  |        |  ヽ_,,-''"
__|_    \\,,-'"\__/  /     ,────''''''''''''''"""""""
    ~フ⌒ ̄ ̄  ~ヽ ヽ   ̄ ̄"""'''''''--、""''''---,,,,,,__
    /       ̄''、|ノ           )ヽ
___/       ̄ ̄)           / |___
19デフォルトの名無しさん:2008/07/27(日) 20:48:34
>>5
> ポインタと言うのはあくまでも同一CPU内でのデータの位置を示す物なんだから


そういう説明が一番良いのかな。
multi CPU 機とかでその説明が本当に適切?
メモリ内のデータの位置ならまだ判るんだが…

20デフォルトの名無しさん:2008/07/27(日) 21:07:13
>>19
multiCPUとかでも普通に生ポインタは問題だよ。
アクセス違反とか当然発生するからな。
21デフォルトの名無しさん:2008/07/27(日) 21:24:27
>>20
問題なのはわかるが「あくまでも同一CPU内でのデータの位置を示す物」なの?
22デフォルトの名無しさん:2008/07/27(日) 21:43:15
同一プロセス空間内だろー。
23デフォルトの名無しさん:2008/07/27(日) 22:01:40
言いたい事は分かるが、今後プロセスが同一マシン内で完結しないようなアーキティクチャが全盛となるばあいだってあるからなぁ
24デフォルトの名無しさん:2008/07/27(日) 23:04:21
分散共有メモリとか?
25デフォルトの名無しさん:2008/07/27(日) 23:56:38
ポインタを学ぶのではなく、どういう場合にどういう風に
ポインタを使うべきか、それでどんなメリットとデメリットがあるのか、
そういう体系を整理するのが先ではないだろうか。
理論を持たない実践は無謀。
ポインタ挫折歴20年継続中の俺が言うのだから間違いない。

手始めに誰か「典型的なポインタを使用すべきケース」を挙げてくれないか。
まとまってきたら俺らで本出して印税稼ごうぜ。
26デフォルトの名無しさん:2008/07/28(月) 00:29:10
>>23
そんな場合でもポインタ使うべきなん?
27デフォルトの名無しさん:2008/07/28(月) 00:53:34
>>23
C言語のポインタがそんなものをサポートする必要はないから
ポインタの定義に含めなくていいだろ
28デフォルトの名無しさん:2008/07/28(月) 01:37:47
>>25
ポインタを使うべきケースなんて無い。
C言語の特性上ポインタを使うと処理が早くなるといった類いの物しか無い。
だがそれすら最適化という呪文でどうにでもなる。
29デフォルトの名無しさん:2008/07/28(月) 05:36:49
>>28
> ポインタを使うべきケースなんて無い。
組込みの経験は無いようですなw
30デフォルトの名無しさん:2008/07/28(月) 08:07:08
戻り値は構造体をスタックにコピーしろってことでしょうか?(C言語)
31デフォルトの名無しさん:2008/07/28(月) 09:25:22
tree とか linked list の実装をするのにポインタを使わずにどうやるんだ
32デフォルトの名無しさん:2008/07/28(月) 10:31:00
>>28 はヒープも使わないし、複合データの受け渡しはグローバル変数だし
>>31 みたいな実装もしないんだろう。
33デフォルトの名無しさん:2008/07/28(月) 15:45:38
ポインタが絶対必要な概念なら、javaは無いだろ。
そう言う事さ。

必ず代用出来る方法があるから、ポインタが本当に必要な局面なんて実は無いのさ。

もちろん、ポインタという構造自体は隠蔽されるだけだけどね。
なんせアセンブラレベルまで落とせばポインタしか無いようなもんだからな。
34デフォルトの名無しさん:2008/07/28(月) 15:51:06
そこでちょいと疑問なんだが、Javaでリンクトリストってどうやって実現するの?
35デフォルトの名無しさん:2008/07/28(月) 15:58:52
>>33
>ポインタという構造自体は
「ポインタ」は概念であり、かつC、PL/M、Pascal 等の限られた言語にしかない。
>アセンブラレベルまで落とせばポインタしか無い
ふつー、アドレス。

>>34
LinkedListで。
まあ内部的には参照だろうけど。
36デフォルトの名無しさん:2008/07/28(月) 16:28:36
>>35
読解力無いくせにレスすんなよきちがい。

>ポインタしか無いようなもんだからな
と言ってるんであって、同じ概念でアドレスを言ってみせたんだろ?

で、隠蔽されるはポインタで構成されるデータ構造だろうが、概念の話なんかしてねえよwww
概念は最初から登場してねえの前提だろwww

きもいから俺にレスすんなや
37デフォルトの名無しさん:2008/07/28(月) 16:28:41
実際に C/C++ でコード書いていれば、他人のコード使ったり、ライブラリ
を使うことがある。そうすれば API/仕様上ポインタ使わざる得ない場合が出てくる。
私はポインタは必要無いと思いますから使いません、では済まないよ。
38デフォルトの名無しさん:2008/07/28(月) 16:32:43
まあ、スレタイが悪かったな。
まるでC/C++が言語の全てみたいな暗黙の了解にされてる時点でポインタを理解するのは不可能だろ
39デフォルトの名無しさん:2008/07/28(月) 16:45:30
宣言を int& ponta; とすれば少しは理解しやすいかも
40デフォルトの名無しさん:2008/07/28(月) 16:54:09
>>36
すまん、その崩壊した日本語ではこれ以上レスできない。
41デフォルトの名無しさん:2008/07/28(月) 17:03:21
ポインタ変数に入っているのは、アドレス値というのが結構重要なポイントだよね。
32ビットアドレッシングなら、2バイトの大きさの変数になるのかな?

int* と long* が違う大きさのメモリを確保していると勘違いしている人多いよね。
42デフォルトの名無しさん:2008/07/28(月) 18:15:58
>>40
だからキモイからキチガイはレスすんなよ
43デフォルトの名無しさん:2008/07/28(月) 18:35:06
>>41
なかなか釣れませんね。
44デフォルトの名無しさん:2008/07/28(月) 18:52:42
突っ込むのもめんどくさいから放置
45デフォルトの名無しさん:2008/07/28(月) 20:02:35
アセンブラでポインタに対応する概念は間接参照でしょ。
だからといって別に間接参照ばっかじゃないし。
46デフォルトの名無しさん:2008/07/29(火) 05:56:14
>>33
そこでちょいと疑問なんだが、Javaでぬるぽが出るのは何故なの?Javaはポインタが不要だから?
47デフォルトの名無しさん:2008/07/29(火) 06:47:26
今年の夏は例年を上回るレベルの低さだなあ。
>>46
クラス名になんで「Pointer」という語を含むのかは知らんが
NullPointerExceptionの発生要因にポインタ云々はこれっぽっちも関係ない。
null変数を参照したってだけだ。
48デフォルトの名無しさん:2008/07/29(火) 11:16:41
ポインタなんて無くても何とかなるのだが、2008年になって1970年代の言語の仕様の議論をしてもしょうがないだろう。
cの欠点のいくつかは、開発された当時、現実的なコンパイル速度と実行速度を維持するために
あえて修正せずに仕様としたものだからな。
関数プロトタイプもそうだし、ポインタもそうだ。auto変数を初期化しないのも。

で、今学習する人に対して、ポインタが要るかどうかだが、
「ターゲットハードウェアがcしかサポートしていない」なら要るだろう。
cでポインタ無しでプログラムを書くのは効率が悪すぎる。
しかし、「C++&STLとか、javaが使える」なら学習する必要はないと思う。
49デフォルトの名無しさん:2008/07/29(火) 11:38:19
C++使うなら、STLを使用するかどうかに関わらずポインタは避けようもない。
50デフォルトの名無しさん:2008/07/29(火) 11:40:01
auto_ptrなりiteratorなりを使えば、割と安全に使えるけどね。
51デフォルトの名無しさん:2008/07/29(火) 11:47:19
>>49
避けられない例とやらを挙げてくれよ。C++はcとは違って参照がある。STLを使えばstd::stringが使える。
ポインタを一切排除したプログラミングも可能だと思うけどね。
52デフォルトの名無しさん:2008/07/29(火) 11:54:19
>>51
取り敢えずこの辺。
http://pc11.2ch.net/test/read.cgi/tech/1217123234/57
2,3は参照で済むし1,4は>50だけど。
53デフォルトの名無しさん:2008/07/29(火) 12:00:08
ふつーC++でもちょっとしたフレームワークのお世話にはなるわけで
そのクラスライブラリ群をポインタで扱う事は多々有る。
54デフォルトの名無しさん:2008/07/29(火) 12:32:57
>>52
>1. 配列を関数に渡す際にどうしても必要
std::vectorを参照で渡せばよい。

>2. 構造体を関数にコピーレスで渡したい際にどうしても必要
オブジェクトを参照で渡す。ついでにconstで渡せば壊されないで済む。

>3. 別関数内の変数の値を変更したい際にどうしても必要
変数を参照で渡す。

>4. メモリを動的に確保する際にどうしても必要
まあ、強いて言えばこれかなあ。でもこれとて、たった1個のオブジェクトを確保するならnewが要るけれど、
消えものならautoでいいから、親に返すときとかにしか使わないよなあ。
複数個のオブジェクトならSTLコンテナを使えば動的に拡張できるから、「どうしても必要」な例がすぐに思いつかないな。

>5. 特殊なデータ構造を実現する際にどうしても必要
これじゃ説明になってないよママン
55デフォルトの名無しさん:2008/07/29(火) 14:22:33
C++でポインタを避けられない最大の要因は、なんと言ってもC向けの低水準なAPIだろ。
次にMFCのような古臭いフレームワーク。

話逸れるが、そういうAPIを使えることもC++の利点だとは思うけど、
Javaやスクリプト言語のような高水準のライブラリがもっと標準でほしい。
56デフォルトの名無しさん:2008/07/29(火) 14:40:07
C++ でポインタを避けられない状況はあるぜ。
ある変数への参照をメンバに持ちたい場合、
その参照先を初期化時から変更しないのであれば参照で持てるが、
参照先を途中で変更したい場合はポインタにせざるをえない。
57デフォルトの名無しさん:2008/07/29(火) 14:41:24
あと、配列を引数に取りたい場合も、
実際には全ての配列を std::vector にするわけにもいかんので
std::vector への参照を引数に取る関数ばかりを使うこともできない。
58デフォルトの名無しさん:2008/07/29(火) 14:51:08
>>55
> Javaやスクリプト言語のような高水準のライブラリがもっと標準でほしい。

Java って C/C++ に比べて高水準なライブラリそんなに多かったっけ?
Java も使うけどむしろライブラリが少なくて C++ 選ぶ場合も
多いんだけど。

標準だけでは少ないかも知れないが、標準だけでカバーしようとは
しないというのが C からの方針。標準だけに限るとあまり意味ないのでは。

標準に限らなければ C/C++ は内容が高水準なライブラリが多い。
API とかはイマイチのものもあるかもしれんが、外見よりは内容が
重要だと思うよ。
59デフォルトの名無しさん:2008/07/30(水) 12:31:32
>>58
スレッドとかソケットとかはC++標準で欲しいよ。
標準だといろんな処理系で使える(可能性が上がる)。
そこが良ければBoostでもなんでもいいんだけどね。
60デフォルトの名無しさん:2008/07/31(木) 04:13:00
別に boost でいいと思う。
どうせ結局使えない環境では使えないだろうし。
61デフォルトの名無しさん:2008/08/06(水) 21:15:48
Cは歴史があるから
ネットを探せばライブラリは
ゴロゴロ転がってる
62デフォルトの名無しさん:2008/10/26(日) 01:42:10
3
63デフォルトの名無しさん:2008/10/26(日) 01:45:01
C++は(newがポインタ返すから)ポインタを避けるのは難しい
64デフォルトの名無しさん
490 名前:名無し検定1級さん 投稿日:2008/10/26(日) 01:59:26
高度な3Dゲームといえば
グランツーリスモのプログラマは(最低年収800だか1000だか)
C/C++/ASMでの募集だったな。


491 名前:名無し検定1級さん 投稿日:2008/10/26(日) 02:00:51
グランツー
http://www.polyphony.co.jp/