1 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 11:40:35 ] C言語の入門者向け解説スレです。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題を片付けます 115代目 pc11.2ch.net/test/read.cgi/tech/1217741118/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 35 pc11.2ch.net/test/read.cgi/tech/1219761846/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
152 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:20:34 ] >メモリリークとは、各プログラムが確保した領域が開放されないままプログラムが終了したときに、 >確保されたまま他のプログラムが使えない領域が残ることだと思い込んでいたのですが違うのでしょうか? はい
153 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:37:53 ] このスレは池沼の集まりか
154 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:38:58 ] そう、お前がその筆頭。
155 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:39:48 ] winとかunix系とかDOSとか、そのあたりのOSはfree()し忘れても、プロセスが終了するとメモリは開放される。
156 名前:デフォルトの名無しさん [2008/09/20(土) 17:45:07 ] INT 21H, AH=31H
157 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:00:35 ] まとめると >>147 にある状況はwindows、unix系ではOSが何とかしてくれる でもプログラムのやりようによっては解放されないこともある(mutexとかなんとかで) ってことで大丈夫でしょうか
158 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:00:56 ] >>148-152 ,155 ありがとうございます。 常駐するようなもの以外は、それほど過敏になることはないんですかね。
159 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:01:13 ] >>151 そいつはメモリリークというより、リソースリークじゃね? 閑話休題 mallocだと大体のPC環境だと後始末してくれる処理系になってるけど、 共有メモリとかでリークすると、プロセスが終了しても残ったりすることもある。
160 名前:デフォルトの名無しさん [2008/09/20(土) 18:32:09 ] >>138 Cに規格書はない もしかして規格票って言いたかったのか?
161 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:34:53 ] ↑馬鹿
162 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:44:55 ] JISでは規格票が正式名称だが、ISOやANSIのものは規格書と呼んでなんら問題ない。
163 名前:デフォルトの名無しさん [2008/09/20(土) 19:04:02 ] ISO や ANSI のどこに「規格書」って書いてあるんだよ? 確か英語だったはずだが・・・
164 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:08:24 ] >>121 某エディタのソースコードにあって、 文字列か文字の幅を返す関数にそのfor文が使われていました。
165 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:11:06 ] >>163 単なる和訳だろ。
166 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:20:07 ] >>164 それはない
167 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:20:40 ] >>163 英語のものを日本語で呼んではいけないのか。
168 名前:デフォルトの名無しさん [2008/09/20(土) 19:26:05 ] >>167 非標準の邦訳が通じなければ説明責任はそれを言った者にある ただし別にわかってやれたからって、こちらに利益はないので説明がしたければどうぞご勝手に
169 名前:デフォルトの名無しさん [2008/09/20(土) 19:27:28 ] >>166 ちなみに DWORD CMyEdit::GetTextWidth(LPCWSTR pstr) { DWORD i,n; for(i=n=0;i<pstr[i];i++){ if(IsMB(pstr + i))n+=2; else n++; } return n; }
170 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:28:14 ] 以上、馬鹿の負け惜しみでした。
171 名前:デフォルトの名無しさん [2008/09/20(土) 19:31:09 ] 「単」純バカのな
172 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:32:22 ] >>169 「文字列か文字の幅を返す関数」ではないな
173 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:37:49 ] >>169 i<pstr[i] じゃなくて pstr[i] になってない?
174 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:40:40 ] >>169 誰がそんな糞コード撒き散らしてんだよ
175 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:42:26 ] >>173 なってないです。 MyEditというソフトウェアのソースコードMyEditUtil.cppの493行目を見ればわかります。
176 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:45:03 ] sky_dreamer.at.infoseek.co.jp/softwares/myedit.htm
177 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:52:37 ] >>169 バグだろ。
178 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:54:48 ] ライセンスがとてつもない矛盾を呈してる件
179 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:06:01 ] エディタをダウソしてreadmeを見たら、MyEdit.chm の『使用許諾契約書』を読めって書いてあったけど、MyEdit.chmが入ってないな。 フルパッケージのほうもダウソしてみたら、やっぱりMyEdit.chm の『使用許諾契約書』を読めって書いてあるけど、使用許諾のページが開けないじゃん。
180 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:10:37 ] ?
181 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:14:56 ] >>179 アーカイブ壊れてるんじゃね? myedit_v116_full.zip md5 c514e4e1d2680235ab7c61bfd8aed4c0 MyEdit.chm md5 1b63a35be248d1921acd47eb06d50ef1
182 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:20:24 ] >>181 MyEdit.chmを入れ忘れてるだけじゃね?
183 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:21:25 ] >>169 grepしたら、そのメソッド、どこからも呼ばれてないみたいだから、やっぱバグだろな。
184 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:28:32 ] そろそろスレ違いな気もしてきたが。 >>183 エディタのexeの方のソースってどっかにあった? dllの方だけだと、多分クラスライブラリのインターフェースな関数だと思うから、 grepしても引っかからないのは当たり前っぽいんだけど。 あのエディタでGetTextWidth()が使われてないかはどうにも。 が、まぁ、バグっぽいってのは同意だがねー。
185 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:31:52 ] MyMemo.exeが本体みたい。
186 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:34:00 ] >>184 本体のソースは入ってなかったのか。 そんなまじめに見てなかったよ。
187 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 23:06:15 ] Cでtemplate的なものをなんとか実装できませんかね?
188 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 23:07:11 ] >>187 マクロ CSTL あたりを参考にどうぞ
189 名前:デフォルトの名無しさん [2008/09/21(日) 00:30:45 ] すいません、初歩的な質問なのですが・・・ 割り算で 7÷32 の余りは 0 なんですか? てっきり、余りは7だと思ってたんですが・・・
190 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 00:32:32 ] 7 / 32 7 % 32
191 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 00:33:37 ] 商が0で余りが7
192 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 00:33:41 ] >>189 数学の質問(算数か?)は専門スレへ C言語の話なら割り算とあまりの計算のそれぞれで使う記号は何を使ってます?
193 名前:デフォルトの名無しさん [2008/09/21(日) 00:50:01 ] C言語です。 商なら7/32、余りなら7%32 でプログラム組んでみたのですが… プログラム printf("i=%dのとき i/32=%d…%d 余り/8=%d \n",i,i/32,i%32,(i%32)/8); これを出力すると i=0のとき i/32=0…0 余り/8=0 i=1のとき i/32=0…1 余り/8=0 i=2のとき i/32=0…2 余り/8=0 i=3のとき i/32=0…3 余り/8=0 i=4のとき i/32=0…4 余り/8=0 i=5のとき i/32=0…5 余り/8=0 i=6のとき i/32=0…6 余り/8=0 i=7のとき i/32=0…7 余り/8=0 i=8のとき i/32=0…8 余り/8=1 i=9のとき i/32=0…9 余り/8=1 i=10のとき i/32=0…10 余り/8=1 i=11のとき i/32=0…11 余り/8=1 i=12のとき i/32=0…12 余り/8=1 i=13のとき i/32=0…13 余り/8=1 i=14のとき i/32=0…14 余り/8=1 i=15のとき i/32=0…15 余り/8=1 i=16のとき i/32=0…16 余り/8=2 となってしまいまして…(@@;
194 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 00:54:51 ] >>193 算数はできますか?
195 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 00:59:20 ] >>193 それでいいと思うけど、どうなるはずだと思ってるの?
196 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 01:00:10 ] 算数についての認識が間違ってるなw その処理はなんらおかしくないw
197 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 01:06:25 ] 余りを8で割って何がしたいんだ?
198 名前:193 [2008/09/21(日) 01:08:43 ] ごめんなさい!あほでした 普通に合っていますね…。 商/ と 余% をごっちゃにしていました…。 しょうもない質問してすいませんでした!(*_*)
199 名前:デフォルトの名無しさん [2008/09/21(日) 01:15:51 ] 夜は冷えるね。
200 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 01:30:36 ] >>198 配列までしか知らない俺も心配になる。大丈夫か?
201 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 01:35:20 ] あんまり馬鹿にするなよ 勘違いなんて誰にでもあるだろう
202 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 01:38:04 ] >>201 まーな || と && と != を使った条件判断ってあまりくまないから 時々テストの段階で思ったように動かなくて後で気がつくってことはある。
203 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 01:43:56 ] 条件分岐で&&はかなり使うな &と混ぜて使うと少し紛らわしい
204 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 03:06:33 ] C++!C++!C++!C++ぅぅうううわぁああああああああああああああああああああああん!!! あぁああああ…ああ…あっあっー!あぁああああああ!!!C++C++C++ぅううぁわぁああああ!!! あぁクンカクンカ!クンカクンカ!スーハースーハー!スーハースーハー!いい匂いだなぁ…くんくん んはぁっ!C++様の桃色ブロンドの髪をクンカクンカしたいお!クンカクンカ!あぁあ!! 間違えた!モフモフしたいお!モフモフ!モフモフ!髪髪モフモフ!カリカリモフモフ…きゅんきゅんきゅい!! 小説12巻のC++様かわいかったよぅ!!あぁぁああ…あああ…あっあぁああああ!!ふぁぁあああんんっ!! アニメ2期放送されて良かったねC++様!あぁあああああ!かわいい!C++様!かわいい!あっああぁああ! コミック2巻も発売されて嬉し…いやぁああああああ!!!にゃああああああああん!!ぎゃああああああああ!! ぐあああああああああああ!!!コミックなんて現実じゃない!!!!あ…小説もアニメもよく考えたら… C + + 様 は 現実 じ ゃ な い?にゃあああああああああああああん!!うぁああああああああああ!! そんなぁああああああ!!いやぁぁぁあああああああああ!!はぁああああああん!!ベル研究所ぉおおおお!! この!ちきしょー!やめてやる!!現実なんかやめ…て…え!?見…てる?表紙絵のC++様が僕を見てる? 表紙絵のC++様が僕を見てるぞ!C++様が僕を見てるぞ!挿絵のC++様が僕を見てるぞ!! アニメのC++様が僕に話しかけてるぞ!!!よかった…世の中まだまだ捨てたモンじゃないんだねっ! いやっほぉおおおおおおお!!!僕にはC++様がいる!!やったよケティ!!ひとりでできるもん!!! あ、コミックのC++様ああああああああああああああん!!いやぁあああああああああああああああ!!!! あっあんああっああんあAda様ぁあ!!シ、Cー!!C#ぅうううううう!!!C++0xぅううう!! ううっうぅうう!!俺の想いよC++へ届け!!ベル研究所のC++へ届け!
205 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 10:44:56 ] C++のアニメ2期って興味あるなwww
206 名前:デフォルトの名無しさん [2008/09/21(日) 12:28:44 ] ↓これは、何をする関数ですか? #include <string.h> void manko( unsigned long la ,char* str ) { unsigned long msk = 0x80000000; for( int i = 31; i >= 0; --i ) { *(str + 31 - i) = ( msk & la ) ? '1' : '0'; msk >>= 1; } *(str + 32) = '\0'; }
207 名前:デフォルトの名無しさん [2008/09/21(日) 12:40:30 ] >>206 関数の名前を見た瞬間に読む気をなくした
208 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 13:02:47 ] la に 1, 2, 3, …って入れていって実行してみればいいんじゃないかな
209 名前:デフォルトの名無しさん [2008/09/21(日) 13:19:14 ] #include <stdio.h> #include <string.h> void main( void ) { unsigned long msk = 0x80000000; unsigned long la = 0x84218421; unsigned char strings[33]; unsigned char* str; int i,j; str = &strings; j = 0; for( i = 31; i >= 0; --i ) { *(str + 31 - i) = ( msk & la ) ? '1' : '0'; printf("%c", *(str + 31 - i) ); msk >>= 1; if( j >= 3 ) { printf(" "); j = 0; } else { j++; } } *(str + 32) = '\0'; }
210 名前:209 mailto:sage [2008/09/21(日) 13:19:57 ] 受け取るデータを関数内でダミー定義するとかして実行すべし。 メモリ見れる環境なら直接見る、見れないならprintfで出してみる。 ま、結論いっちゃうと、"la"で貰った値をビット毎に評価して、真なら"1"を、偽なら"0"を "str" に書き込んでる。 実行してみるとわかるが、"la" のどのビットが立ってるかがわかる、ということ。
211 名前:デフォルトの名無しさん [2008/09/21(日) 15:28:03 ] 実行してみなきゃわからんのか
212 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 15:56:26 ] int x; のようなローカル変数があったとして そのような変数の宣言は定義を兼ねますので、 口頭で説明する場合はどちらの用語を使用するのが適切でしょうか? あと上記のような宣言(定義)は初期値が不明ですので、このような宣言(定義)の 特別な呼び方などありましたら教えてください。
213 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 16:14:56 ] ローカル変数の宣言と定義が分離することはありえないのでどう呼んでも誤解はないはずだが 強いて言えば宣言だと思う あとは単に「初期化されていない」で十分
214 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 16:54:19 ] >>212 C言語なら、定義の場合は定義と言っとけば大体問題ない。 あと、宣言が定義を兼ねてるのではなく、 ある種の宣言を特別に定義と呼ぶだけなので、 宣言と言ったところで別に問題ないと思う。 ていうか、どっちが適切かなんか文脈次第だろがよ。 漠然と聞かれても「どっちでも良い」としか言いようない。
215 名前:デフォルトの名無しさん [2008/09/21(日) 17:42:40 ] つまり、宣言と定義は混同してよいのだな?
216 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 17:57:46 ] >>215 帰れよ
217 名前:デフォルトの名無しさん [2008/09/21(日) 18:05:17 ] 答えられない低脳はすっこんでろ
218 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 18:08:15 ] sageずに煽るのはいつもの俺言語な変な子 みんな知ってるね
219 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 18:08:58 ] >>217 C言語どころか日本語の通じないかたはお帰りください
220 名前:デフォルトの名無しさん [2008/09/21(日) 18:14:23 ] >>219 どの日本語が通じなかったんだ?
221 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 18:22:32 ] >220 日本語を理解できることは、このスレで議論する論客として最低限の資格だ 質問する気にしても、人にものを尋ねるときの態度がまるでなっておらず、質問者として最低限の資格もおまえは備えていない 繰り返すがチンパンジーには無理な問題だ あきらめて帰れ
222 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 18:23:02 ] >>221 自己分析がよくできてるね
223 名前:デフォルトの名無しさん [2008/09/21(日) 18:24:21 ] >>221 そんなに悔しかったのか、よかったな
224 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 18:32:47 ] 結構熱いな、ここw
225 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 18:45:10 ] >>215 >>220 >どの日本語が通じなかったんだ? どの、というより全体的に意味の取り方がおかしいと思われる。 どこをどう取ったら「宣言と定義は混同してよい」という結論になるんだ? 日本語が理解出来て無いとしか思えない。
226 名前:デフォルトの名無しさん [2008/09/21(日) 19:21:16 ] すみません。C言語の文法書2冊とWinAPIの本を2冊読みました。そこで 以前から私が作りたかった、ショートカット作成プログラムをぜひとも作りたいのです。 でも、やり方とかMSDNを調べてもわかりません。具体的に手順を書かせていただきますと。 1.コンソールアプリから2つフォルダのフルパスを入力する。 2.WindowsAPIで書いたショートカット作成関数を呼び出してお互いのフォルダにお互いのフォルダの ショートカットを作成する。 そこで、ショートカット作成のWindows32APIのMSDNの調べ方もしくは 関数そのものを教えて欲しいのです。すみませんが、教えてください。よろしくお願いします。
227 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 19:23:11 ] win32APIはここで聞けば? pc11.2ch.net/test/read.cgi/tech/1221446107/
228 名前:226 mailto:sage [2008/09/21(日) 19:27:27 ] >>227 どうもありがとうございます。そちらに移動させていただきます。
229 名前:デフォルトの名無しさん [2008/09/21(日) 21:28:19 ] >>225 で、定義と宣言は混同しても文脈次第でどっちでも良いのか、悪いのか?
230 名前:デフォルトの名無しさん [2008/09/21(日) 21:29:07 ] >>226 せっかくだからジャンクションを作ってみてはどうだ?
231 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 23:14:08 ] >>229 混同はしてはいけないけど、定義も宣言であるから、 文脈によってはどちらを使っても正しい表現になる場合もある。 どちらを使っても良い場合があるという事から、すなわち混同してよいと解釈したわけ? やっぱり日本語が理解出来て無いようだね。
232 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 23:26:46 ] /* * A function is only defined if its body is given * so this is a declaration but not a definition */ int func_dec(void); /* * Because this function has a body, it is also * a definition. * Any variables declared inside will be definitions, * unless the keyword 'extern' is used. * Don't use 'extern' until you understand it! */ int def_func(void){ float f_var; /* a definition */ int counter; /* another definition */ int rand_num(void); /* declare (but not define) another function */ return(0); }
233 名前:232 mailto:sage [2008/09/21(日) 23:42:20 ] 宣言(declaration)は使用を宣言(declare)すること 定義(definition)は変数やマクロや関数のボディを定義(define)すること ではあるまいか?
234 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 23:43:45 ] だから場合によってはひとつで両方兼ねてたりするだろ?
235 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 00:13:30 ] Cの用語としては、もうちょっとちゃんと記述されていて、 JISより抜粋。 >識別子の定義(definition)とは、宣言のうち次のものをいう。 >・オブジェクトに対しては、そのオブジェクトの領域を確保する宣言 >・関数に対しては、関数本体を含む宣言 >・列挙定数または型定義名に対しては、その識別子の(唯一の)宣言 余談だけど、C++だとまたもうちょっと違う。
236 名前:デフォルトの名無しさん [2008/09/22(月) 08:50:57 ] (func1) register キーワードのついた別々の変数を用いる (func2) a, b を array[0], array[1] に置き換えた以外は func1 と同じ このような時,func1 と func2 の振る舞いは変わりますか? int func1(void) { register int a, b; 何か a, b をたくさん使う処理 } int func2(void) { register int array[2]; 何か array[0], array[1] をたくさん使う処理 }
237 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 10:37:59 ] >>236 振舞いは変わらない。それで変わったら困るでしょ。 func2の方は最適化が阻害されて遅くなるコンパイラとかあるかもね。
238 名前:デフォルトの名無しさん [2008/09/22(月) 16:16:39 ] >>231 やっと少しお勉強してきたようだな たったそれだけのために何時間かかってるんだよ ぼけ 文脈によってはなんて逃げてないで、どういう場合かはっきりしろ 現状、その逃げによって意味をなしていない >ある種の宣言を特別に定義と呼ぶだけなので、 >宣言と言ったところで別に問題ないと思う。
239 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 16:38:50 BE:417694526-2BP(0)] × はっきりしろ ○ 教えてくださいお願いします
240 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 16:52:09 ] >238 お帰りください
241 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 16:53:00 ] >>240 お前が帰れカス
242 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 16:56:21 ] >たったそれだけのために何時間かかってるんだよ これはひどい >>238 お前さんこそそんな支離滅裂なレスを考えるのに17時間もかけたのかい てなことになるな
243 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 17:09:28 ] >>236 registerストレージクラスをどう解釈するかは処理系依存なのでなんともいえません。
244 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 17:45:22 ] >>243 くわしく
245 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 17:58:35 ] 疑問に思ったら、自分の使ってるコンパイラでアセンブラ出力してみるのがいいよ。
246 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 18:20:18 ] foo bar[row][col]; bar[r][c] = hoge; ↑これって foo bar[row * col]; bar[r * col + c] = hoge; に等しいのか、それとも foo (bar[col])[row]; (bar[row])[col] = hoge; なのか、どっちなんでしょう? あと下のbarにsizeofするとsizeof(foo) * row * colに等しくなります 下のやつはbar[col]へのポインタの配列だから sizeof(foo*) * rowになると思うのですがなぜこうならないんでしょうか?
247 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 18:22:03 ] >>244 詳しくも何も、規格票には「アクセスを可能な限り高速にすることを示唆する」とかなんかしか書いてなくて、 レジスタに割り当てろとも、アクセスを高速にしろとも要求されていない。
248 名前:デフォルトの名無しさん [2008/09/22(月) 18:26:58 ] >>242 即レスがトレードマークな常駐野郎にしては遅かったから変だと思ったんだよ
249 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 18:28:54 ] >>246 配列はポインタではない。キミは何かを勘違いしてる。 次の3つは等しい: foo bar[row][col]; int (bar[row])[col]; typedef foo foos[col]; foos bar[row]; これは縦と横が反対になっている: foo (bar[col])[row]; これは明らかに違う: foo bar[row * col];
250 名前:249 mailto:sage [2008/09/22(月) 18:30:23 ] >>249 書き間違えた × int (bar[row])[col]; ○ foo (bar[row])[col];
251 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 18:35:30 ] >>246 >下のやつはbar[col]へのポインタの配列だから 違うよ foo (bar[col])[row] は foo[row] が col 個の配列 つまり foo bar[col][row] と同じ foo[col] へのポインタ row 個の配列が欲しければ foo (*bar[row])[col] と書くけど、普通使わないと思うよ foo へのポインタを row 個持つ配列 foo *bar[row] の方がよく使う
252 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 18:40:17 ] >>247 今はregister付けても大体無視されるよな