1

(a+4)次のCプログラムが4と1の減算を返すのはなぜ(a+1)ですか?

     #include<stdio.h>
     int main()
     {

      int a[3][2]={1,2,
                   5,7,
                   6,8};

      printf("\n%d",(a+4)-(a+1));
      return 0;}

また、減算演算子を加算(a + 4)+(a + 1)に置き換えると、次のようになります。

error: invalid operands to binary + (have ‘int (*)[2]’ and ‘int (*)[2]’)
4

3 に答える 3

3

aは配列であり、それ自体を使用するとポインター (つまり、メモリ アドレス) に分解されることに注意してください。これは、(a+4)(a+1)もメモリアドレスであることを意味します。2 つのアドレス間の距離を計算しているため、メモリ アドレスの減算は理にかなっています。ただし、メモリアドレスを追加するのはナンセンスです。

ここで何をしたいのかわからないため、問題を解決するための解決策を提案することはできません. さらにサポートできるように、質問を詳細に編集してください。

于 2013-03-18T18:51:40.090 に答える
0

私はあなたのコードを実行し、差として 3 を得ました。これは理にかなっています: a + 4 - (a + 1) = 3.

エラーについては、C ではセーフガードとして 2 つのメモリ アドレスを追加できないと思います。以前のコメントで指摘したように、そうすることはまったく無意味です。ただし、あるメモリ アドレスを別のメモリ アドレスから減算すると、特定の場合に役立つ情報が得られます (メモリ内の 2 つの場所の間のオフセット)。

于 2013-03-18T18:54:33.780 に答える
-1

構文エラーがあります。a を単一の整数として使用していますが、a のデータ型は整数配列です。たとえば、減算は次のようになります: a[1][3]-a[0][3] そして、ここでの値は 3 に等しくなります。

(参考までに、配列は実際には a={1,2,5 7,6,8} のように見え、3 行と 2 列があります。

于 2013-03-18T19:09:25.920 に答える