- 1 名前:デフォルトの名無しさん [2008/07/27(日) 10:47:14 ]
- int i = 10;
int * p = &i;//int型ポインタpにiのアドレスを代入する 簡単。 char str1[] = "abcde"; char * str2 = "abcde"; 上と下は同じでどっちを使ってもいい。
- 152 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 11:03:57 ]
- 終始ビット演算を使われるよりまし
- 153 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 00:55:51 ]
- むしろ何で理解できないかが理解できない
- 154 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 06:29:00 ]
- そういうこと言う奴は理解してない
- 155 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 12:13:42 ]
- 5次元配列をいくつか使っているソースみて爆死した。
書いた本人はリタイアして該当コードは最初から書き直しになった。
- 156 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 12:50:32 ]
- 多次元配列を扱う部分だけLispのコードから生成するとかはやるよ
ルールが決まってて単純にそのルールを繰替えし適用するだけだから 機械にやらせた方が絶対安全
- 157 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 01:41:35 ]
- 配列なんて、マトリックス構成する要素が幾つにでもなるから
何次元だろうとどうでもいいじゃん。
- 158 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 01:50:07 ]
- 量子化学計算やるには5次元配列が普通に必要になるよ。
小原積分計算する時に。
- 159 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 01:51:39 ]
- といいつつ、まあ実際には普通の配列にはしないんだけどな・・・。
- 160 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 11:32:01 ]
- >>151
ポインタにダブルだとかトリプルだとか属性があるような解釈の仕方をするから理解できないんじゃないの? アスタリスクが並ぶのがいやならtypedefすればいいだけの話だし、そうしてしまえばただのポインタと同じことじゃないか。
- 161 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 11:40:50 ]
- 関数ポインタを引数に取る関数ポインタの二次元配列とか
そういうのになってくると泣ける程複雑になる こういうのってtypedef使ってもいいんだよね? よくポインタの理解度を試すようなクイズで「typedefを使わずに」とかあるけど、 日常的に使っててもできる気がしないわ
- 162 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 11:45:54 ]
- 人間がコンパイラになる必要は無いんだから
そういうクイズは無視でおkだと思う
- 163 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 10:52:16 ]
- void (*fnc[YLEN][XLEN])(int(*)(int));
Cエキスパート:出来るけど見にくいからtypedef なんちゃってプログラマ:出来ないからtypedef、人間コンパイラになる必要はないと言い訳
- 164 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 11:50:21 ]
- typedefは見やすくするためにあるんじゃなくて、
型を抽象化するために使うべきだと思う。
- 165 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:01:11 ]
- 関数ポインタは積極的に typedef しとけ。他は必要なし。
- 166 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 12:54:58 ]
- そういうのが直ぐできるようになるにはどうすりゃいいんだろうな
規格からルールを理解すれば少しは楽になるんだろうかね?
- 167 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 13:03:32 ]
- 簡単にエキスパートになる方法を教えろと言ってるんですね、わかりません
- 168 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 13:13:53 ]
- GCCのソース読むのが近道
読めなければそれが読めるようになるまで簡単な物から読んだり パッチ作ったりしてオープンソースコミュニティに貢献してりゃ10年もすりゃ 今君が想像してる程度のエキスパートには楽になれる って以前言われたことがある
- 169 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 20:50:49 ]
- 10年かあ・・・
確かに俺がブラインドタッチできるように なったのは、毎日PCをさわるようになって 10年くらい経ってからのような気がする。 人間、何事も10年は精進が必要なんだね。
- 170 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 20:51:55 ]
- GCCってそんないいソースか?
- 171 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 21:00:02 ]
- ブラインドタッチに10年って・・・・身体障害者の方ですか
- 172 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 21:09:59 ]
- >>171
いや、10年くらいかかっても不思議じゃないと思うぜ。 人さし指タイピングから始めた俺は、タッチタイピングに切替えるだけでかなりの年月を費したが。 それでもまだブラインドタッチにはたどり着けない。 英語キーボードと日本語キーボードを行ったり来たりした日にはもう大変。
- 173 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 21:11:17 ]
- gaucheの作者も昔HPで
どんな言語でも10年は使わなきゃほげほげって書いてたからだいたいあってると思う
- 174 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 15:14:41 ]
- タイピングなんて我流でいいよ
どうせ出力見ただけじゃ経過は見えないんだから
- 175 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 03:19:03 ]
- 出力だけ要求されるならそれでもいいが
運指が偏ってると年食ってからバネ指とか悪影響もあるから気をつけろ
- 176 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 10:16:24 ]
- 年とると管理業務になるので問題ないです
- 177 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 02:44:08 ]
- >>166
無理に使わなくていいと思うぞ。それを必要と感じる時が来たらそうすればいいんじゃないか。
- 178 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 11:35:40 ]
- #include <windows.h>
#define typedef_func_ptr(returntype, yobidasikiyaku ,functionname) \ returntype (yobidasikiyaku * functionname) main() { typedef_func_ptr(int, WINAPI, ptrMessageBox)(HWND, LPSTR, LPSTR, UINT); ptrMessageBox = MessageBox; ptrMessageBox (NULL, "セクロス", "セクロス", MB_OK); }
- 179 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 07:05:32 ]
- ポインタ?あれはショートカットだショートカット
っていうセンパイの言葉でわかった
- 180 名前:デフォルトの名無しさん [2008/09/07(日) 10:13:02 ]
- たとえ話は、ポインタの理解の役には立たない。
これ定説。
- 181 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:10:11 ]
- 使って覚えろ
これが基本ですね、マクロしかりテンプレートしかり各種ライブラリしかり
- 182 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:54:49 ]
- アドレスとデータの区別がつけば、あとは簡単。
- 183 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:37:35 ]
- 矢印と箱の差。
図を描いてみればアホでもわかるだろ。描こうともしないでわからないとかほざく無能は氏ね。 構造を把握したうえで、「たぐりよせる」操作と「矢印を作る」操作がわかればあとは簡単。
- 184 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 20:09:49 ]
- たとえ話で説明するやつの理解はけっこアヤシイ。
ところで、ポインタには型がある事をお忘れなく。
- 185 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 14:20:46 ]
- >>184
例えを用いずに話して相手が理解出来るなら最初っから躓いてないだろ。
- 186 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 14:26:31 ]
- 例えを用いずにうまく説明できないところがアヤシイw
- 187 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 14:39:55 ]
- 本当にわかっている人は例えなんか使わない。
実際にPGを組ませてビシビシしごく。 ついてこれない香具師は見捨てる。
- 188 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 16:52:47 ]
- >>185-186
喩え話ってのはどーしたって誤謬があるわけで 「理解“した気に”させる」効果しかない。
- 189 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:50:34 ]
- メモリ上にデータが配置されるイメージさえつかめば
ポインタ使ったプログラムの動きは見えてくるんだよな。 そんな低レベルなことまで意識しなきゃならないというのは、 教える側にするとちょっと面倒でもある。
- 190 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:52:10 ]
- ポインタ自体が低レベルな操作のためにあるもんだし
- 191 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:12:10 ]
- なんかもー面倒くさいからポインタ禁止にしてこんな感じのクラス使おうよw
template<classT> class Shortcut { T *pTarget; // ショートカットを設定 void SetShortcut( T &target ) { pTarget = ⌖ } // ショートカット先にデータを設定 void SetData( T data ) { *pTarget = data; } }; 名前は>>179から頂きますた。
- 192 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:15:31 ]
- そしてスマポへ…
- 193 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:18:25 ]
- それoperator=とかoperator*とかoperator->とか実装すると便利だよきっとたぶんおそらく
- 194 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:22:03 ]
- C++使ってるとポインタ演算をしなくなるな
- 195 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:23:43 ]
- STLは使わんの?
- 196 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:25:11 ]
- アレは見た目が似てるだけか。スマソ。
- 197 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:14:41 ]
- mplの
metafunc<type>もポインタっぽく思える metafunc<type>::valueとかで参照できたりするし
- 198 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:22:20 ]
- >>193
+とか-とかも定義しようぜ
- 199 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:44:12 ]
- Cのポインタ演算子*が悪い。かけ算記号と同じなんだもの。
この点だけは、リッチー先生を殴る権利が俺たちにあると思うよ。 俺が言語設計者なら、Data_Pointed_by(ポインタ変数)にする。 あとポインタ変数の型をなくし、すべて1バイトを示すものとする。 ポインタ変数のインクリメント・デクリメントも1バイト単位。
- 200 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:47:01 ]
- >>199
どうしてもポインタをモノにできなかった奴の定番台詞ですな
- 201 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:57:39 ]
- >>199
それなんてCのご先祖様BCPL、特に後半。
- 202 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:57:44 ]
- >>199
そんな糞設計の言語を誰が使うんだよw
- 203 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:58:41 ]
- ポインタの概念を図で説明するときにアドレスの存在を明示しないやつがたまにいるんだよな。
四角から四角へ矢印を引いた図は書けるんだけど、アドレスの存在が意識されにくい図になってる。 つまりこんな図。 □→□ int aという変数にはaという値と&aという値があり、 int *pという変数にはpという値と&pという値と*pという値がある。 これらの5つの要素を図中に明示しないと上手な説明とはいえないね。
- 204 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 02:04:43 ]
- 初心者ですが教えてください。
ポインタ演算で型に応じてポインタが進むのは知っているのですが、 その「どの型ならいくつ進む」という情報は実行ファイル中にどういうふうに保存されているのでしょう?
- 205 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 03:02:00 ]
- >>204
静的に決まる型を解釈して、そういう言うアセンブラコードに変換されてるんだよ 坊や。
- 206 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 03:08:51 ]
- 動的に決定する型はどうやって決定されるんだろうね。
ああ、CやC++じゃそんな芸当出来ないかw
- 207 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 08:44:30 ]
- >>204
コンパイラが吐いたasm読めば分かるよ。 よく分からなかったら、型を変えて見比べてみる。
- 208 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 09:41:45 ]
- >>203 ポインタの俺解釈いいかげんおなかいっぱい
- 209 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 10:20:57 ]
- >>206
Cは兎も角、C++にはRTTIってもんがあるわけだが。
- 210 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 10:53:06 ]
- C++のRTTIはデバッグ用途以外では要らない子
- 211 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 23:25:55 ]
- >>210
いやいやdynamic_castはデバッグ用途ではないだろ。 しょっちゅう使うものでもないけれど。
- 212 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 00:42:46 ]
- ×dynamic_castでオブジェクトの型を判別し、そのオブジェクトのメンバ関数を呼び分ける
→わざわざ多態性のメリットを殺さずに、仮想関数で解決すべき。 ○dynamic_castでオブジェクトの型を判別し、判別している側の振る舞いを変える →これはあり得る。けど委譲で解決したいかな。
- 213 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 01:52:31 ]
- それは、動的に判定されるというより、
予め考えられる型を全部網羅してコーディングしてるだけだしなぁ。 新たに組み込んだhogehogeクラスのポインタとか実装が無いと動かんだろ? あ、仮想関数で呼んでもらえば自前で用意しておくだけで追加が簡単か/
- 214 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 00:05:54 ]
- JavaやC#でこういう感じのコードに時々出食わす。
setObject(new Hoge); //別のところ Hoge h = (Hoge)getObject(); //戻り値の型はObject型 帰ってくるオブジェクトは絶対さっきsetObjectしたときの引数という場合。 もしこれがC++だったらboost::polymorphic_downcastの出番だな。
- 215 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 14:58:51 ]
- >>214
インターフェースを利用できない理由があるの?
- 216 名前:デフォルトの名無しさん [2008/09/11(木) 20:59:10 ]
- C言語には文字列がないので文字列ポインタ作っちゃいました的ナ
- 217 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 23:36:59 ]
- >>215
setObjectやgetObjectは既存のライブラリで、しかも標準だったり有名だったりして 自分が手を加えられるような存在ではないんだ。
- 218 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 01:27:35 ]
- Cの文字列型は廃止の方向で…
- 219 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 03:01:53 ]
- メモリモデルよくわからない
- 220 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 03:16:36 ]
- プログラマにメモリを意識させる言語は糞。
Javaが理想に近いが、記述が冗長すぎてこれも結局は糞。 これからはロジック書きのみに集中できてシンプルな 記述で済む言語がトレンドになる。
- 221 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 08:40:39 ]
- スクリプト系?
- 222 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 09:00:57 ]
- ML系やLispのようなLL言語ですね
ロジックといえばprologやマイナーですがCoq, ETIも見逃せません
- 223 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 11:33:37 ]
- >>220
バターナイフ振り回して「包丁は危険だから糞」って言ってる訳ですね、わかります
- 224 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 11:53:19 ]
- プロセス空間とかよくわかんない
- 225 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 12:06:38 ]
- 糞かどうかはともかく、誰にでも向くものではないのは確かだね。
まあJavaでも十分メモリを意識すると思うが。 >>219 メモリモデルはポインタとかより遙かに悩ましいね。
- 226 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 12:32:18 ]
- >>218
「文字列」などという型はありません。
- 227 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 12:33:06 ]
- >>220
つ[COBOL]
- 228 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 13:02:56 ]
- >>220
Haskellをどうぞ
- 229 名前:デフォルトの名無しさん [2008/10/04(土) 11:47:17 ]
- あげ
- 230 名前:デフォルトの名無しさん [2008/10/04(土) 12:01:50 ]
- char str1[] = "abcde";
char * str2 = "abcde"; >上と下は同じでどっちを使ってもいい。 これは間違い。str1は書き込みできるが、str2は書き込みができないことがある。
- 231 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:19:38 ]
- >>230
どっちも書き込めないときがあるだろ。 パソコン上ではどちらも書き込めるが、 ROM化環境などではどちらも固定される事がある。 これらの最大の違いは、sizeof(); で返される値。 char str1[] = "abcde"; char * str2 = "abcde"; printf("%d¥n",sizeof(str1)); printf("%d¥n",sizeof(str2)); やってみそ
- 232 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:28:25 ]
- 噛み付かれた>>230が不憫でならない
- 233 名前:デフォルトの名無しさん [2008/10/04(土) 12:28:59 ]
- 要はアドレスという概念がわかっているかどうか。
あとは書式の問題でなれだな。 てすぐ結論をだそうとする漏れorz..
- 234 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:44:58 ]
- >>231
配列に書き込めないコンパイラがあるの?
- 235 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:50:49 ]
- オプション次第では、str1も書き込みできないようにできるものがあるかもしれないが、
そんなこと言ったらきりないだろ。 str1にconstがついているなら文句なしに書き込み不可だけど。
- 236 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:51:43 ]
- >>234
多分、配列自体に代入する式が評価中に存在すれば固定領域ではなく揮発領域に設定されるんだろうな。 まあ、ポインタという代物はその操作をコンパイラには分からせなくするチカラもある訳で、 配列で指定した領域にポインタ参照で書き込もうとしたら落ちるとかはあるよ。
- 237 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:59:42 ]
- >>236
すまんが何をいってるのかさっぱりだ バッググラウンドを簡単に説明してくれないか ○○と言う本やコンパイラのマニュアルに書いてあった、でもいいから
- 238 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:14:21 ]
- >>237
「世間には色んなコンパイラがある」ってこと。
- 239 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:18:31 ]
- char s[] = "abcde";
ポインタ経由だと、これに書き込めない環境があるってこと? ないだろ。
- 240 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:21:27 ]
- >>239
最適化されてなければな。 だからおまいの脳内環境だけで結論出すなよw
- 241 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:23:08 ]
- 最適化されたからって、書き込めなくなるのはおかしいだろ。
- 242 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:23:55 ]
- ないってのは言いすぎだな。
ウンコな処理系ってよくあるから。
- 243 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:26:29 ]
- 処理系じゃなくって、コンパイラの問題なの。
- 244 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:37:36 ]
- 「処理系」ってコンパイラも含んでるだろ。ふつー。
- 245 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:39:58 ]
- ああ、分野が違うとこうも話が噛み合ないという見本だな。
- 246 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:44:29 ]
- 知ったかでしゃべってるのを「分野の違い」にすんなよ。
>>239 が、ポインタ経由だと書き込めないってどんな処理系だよ。
- 247 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:50:24 ]
- >>246
だからさ、世の中には色んなコンパイラがあって、色んな環境で色んなCPUが色んな場所で動いてるわけよ。 その全部のローカルな俺様コンパイラ的な物では定数は全部固定データなワケよ。 特に初期化宣言以降どこに右辺に現れない変数も固定な訳よ。 わかる?
- 248 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:51:26 ]
- >>247
ああ、適正だ。 どこにも左辺に現れない変数な。
- 249 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:55:33 ]
- >>247
定数を書き込み禁止領域に置くコンパイラってこと? それごく普通のコンパイラじゃん 文字列リテラルを書き換えようとして落ちるのはANSI仕様上も問題ない 知ったか乙
- 250 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:55:43 ]
- どうやら今日は誤字が多いのでこの辺で消える。
- 251 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:56:24 ]
- というか日本語の上手な人か
言わんとすることはわかったよ
- 252 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:57:51 ]
- >>247
おたくの「分野」の、どのコンパイラでそういう最適化をするのか書けばいっぱつで終了する話題だろ。
|

|