2

C や C++ で配列を逆参照するときに小数を渡すとどうなるか、よくお尋ねします。私が意味することの例:

int arr1[],arr2[];
for (i = 0; i < 5; ++i)
{
  if (i % 2 == 0)
    arr1[i]=i;
  else 
    arr2[i/2]=i;
}

コンパイラーは、 を見たときに何をしますarr2[3/2]か?

4

5 に答える 5

5

i/2整数除算です。この除算の結果は再び整数になります。つまり、0 に向かって切り捨てられた除算の結果です3/2==1; -5/2==-2;。クロック サイクルです。) したがって、分数を配列インデックスに渡すことはありません。

分数の可能性があるデータ型 (たとえば a double) を渡そうとすると、コンパイラはエラーを生成します。

于 2013-03-13T14:09:12.063 に答える
1

除算が最初に行われ、その答えが配列インデックスとして使用されます。したがって、あなたの例で3/2は、 (切り捨て) に解決され1、次に割り当てられarr2[1]=iます。

于 2013-03-13T14:07:36.127 に答える
0

arr2 [3/2]を検出した場合、コンパイラは何をしますか?

コンパイラは何もしません。式「3/2」は有効であり、実行時に整数になります。

于 2013-03-13T14:25:29.437 に答える
0
  1. 配列インデックスは整数でなければなりません。float 型を使用すると、整数にキャストされます。
  2. integer1 / integer2 は、c/c++ で別の整数を生成します。
于 2013-03-13T14:19:29.500 に答える
0

3/2 は 1 に等しい整数の結果を返します。そのような行には「分数」はありません。

arr2[3/2] ==== arr2[1]
于 2013-03-13T14:07:45.757 に答える