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]
か?
i/2
整数除算です。この除算の結果は再び整数になります。つまり、0 に向かって切り捨てられた除算の結果です3/2==1; -5/2==-2;
。クロック サイクルです。) したがって、分数を配列インデックスに渡すことはありません。
分数の可能性があるデータ型 (たとえば a double
) を渡そうとすると、コンパイラはエラーを生成します。
除算が最初に行われ、その答えが配列インデックスとして使用されます。したがって、あなたの例で3/2
は、 (切り捨て) に解決され1
、次に割り当てられarr2[1]=i
ます。
arr2 [3/2]を検出した場合、コンパイラは何をしますか?
コンパイラは何もしません。式「3/2」は有効であり、実行時に整数になります。
3/2 は 1 に等しい整数の結果を返します。そのような行には「分数」はありません。
arr2[3/2] ==== arr2[1]