1 名前:デフォルトの名無しさん [2006/09/16(土) 09:46:26 ] 前スレ ビット演算 pc8.2ch.net/test/read.cgi/tech/1123918075/ 関連スレ アセンブラ… (゜□゜) ↑アッー!↓ pc8.2ch.net/test/read.cgi/tech/1148402614/ 関連情報 Hacker's Delight ttp://www.hackersdelight.org/ ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか ttp://www.amazon.co.jp/exec/obidos/ASIN/4434046683 ビットを数える・探すアルゴリズム ttp://www.nminoru.jp/~nminoru/programming/bitcount.html Bitboard ttp://en.wikipedia.org/wiki/Bitboard
839 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 12:25:02 ] 文字列リテラルは、コンパイラがDATAやTEXTのようなセグメントに配置して プログラムの中に埋め込まれるちょっと特殊なchar[]にすぎん。 "hoge"とか書いた場合、これはそういう配列を暗黙にどっかに確保しろよと コンパイラに言っているのと同時に、式の中で評価されるときは、その(無名の) char配列の名前と同等に扱われる。 要はchar[]なのだから、char*な変数に文字列リテラルを代入したり printf()のような関数に文字列リテラルを引数として渡したり、ということは 普通に・当然のようにやっているはずだ。 さすがにprintf("hello, world"); というコードを見たことが無いとは言わせない。 ならば、[]演算子を適用できるということも当然分かるはずだな。 多分、そういうコードを今まで見たことが無い、見慣れない、ってだけだろう。
840 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 12:32:50 ] >>834 []を特殊なものだと思うからいけない。ただの演算子だ。 a[b]とあったら必ず*(a+b)と置き換えが可能だから、ただのポインタ演算とデリファレンスに成り下がるだろ。 デリファレンスするために、aかbのどちらかはポインタでもう一方は整数でないといけないだけだ。 例えばchar a = 0["01234567"]とあったらchar a = *(0 + "01234567")になり、即ちchar a = *("01234567")であり、char a = "01234567"[0]だ。 これでも理解しにくかったら、全部一時変数にしてしまえばいい。 const char * p = "01234567"; int i = 0; として、char a = p[i]; ならわかるだろ。。
841 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 13:15:16 ] おそらくは、 配列の名前[インデックス] のように教えてる参考書の類が悪いんだろう。