パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

人気のプログラム言語TOP 10 を解説せよ」記事へのコメント

  • CはCでも・・・ (スコア:5, おもしろおかしい)

    by Anonymous Coward

    世の中はCでできている。WindowsだってLinuxだってアメンボだって、みんなみんなCでできている。

    プログラミング言語だってCでできている。PythonだってRubyだってオケラだって、みんなCでできている友達なんだ。

    アメンボとオケラのCは炭素では?

    • by Anonymous Coward

      Cの難易度が誇張されているように思うのだが。
      Javaより難しい?

      • Re: (スコア:1, すばらしい洞察)

        by Anonymous Coward

        世の中にはポインタの加算でなにが起きるか理解できてないのが結構いますから。

        • by Anonymous Coward
          「ポインタの加算」って、ポインタとポインタを足し合わせるのか?そりゃ、何がおこるか理解できんわな。
          • by Anonymous Coward
            やってみるとわかるけど、ポインタ同士の演算はコンパイル通らないから、考えなくていいんじゃね。
            • 同じ型なら引き算は通る(比較も通るけど)。結果は「(ポインタ-ポインタ)/型サイズ」だったような。

              • by Anonymous Coward on 2011年01月31日 16時04分 (#1896018)

                ポインタの型って指している先が何であるかを示すヒントでしかなく、実態はしょせん(通常)4バイトの整数型なんだから型に寄らず演算はできると思った。。。

                親コメント
              • いや、Cのポインタにおいて、型のサイズは重要ですよ。ヒントどころじゃない。
                たとえば、int *ptr1,*ptr2、sizeof(int)==4なら、

                ptr2=ptr1+1;

                としたときに、アドレスで見るとptr2はptr1に4バイト足した位置を指すようになるわけです。

                ここから、逆に、ptr2-ptr1==1 になるようになっていて、演算の対称性が保証されている。
                つまり、ポインタ同士の引き算は「(ポインタ-ポインタ)/型サイズ」 [srad.jp]となる。

                このようなサイズ情報込みで考えると、「ポインタと整数の加減算」および「ポインタ同士の減算」は定義できても、「ポインタ同士の加算」は定義できません。
                (ポインタと整数の加算は交換則が成り立つようになっていて「ポインタ+整数」「整数+ポインタ」どちらも結果はポインタ。
                「ポインタ+ポインタ」を、「ポインタと整数の加算」と見なすには、どちらを整数と見なすかという情報が無いし、
                ポインタのサイズによっては、どちらを整数と見なすかで結果が変わります。)

                #Cの配列アクセス「array[index]」は、「*(array+index)」のシンタックスシュガーなので、「整数+ポインタ」という順番での加算計算できるってことは、「index[array]」って書いても問題ないんですよね。
                #「data = 5[ptr]; 」みたいなコードを書くと、「data=*(5+ptr);」と解釈され正しく動作するけど混乱の元。

                親コメント

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

処理中...