我想问如果我们在 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
.
3/2 产生一个等于 1 的整数结果。这样的行中永远没有“分数”。
arr2[3/2] ==== arr2[1]
当它看到 arr2[3/2] 时,编译器会做什么?
编译器什么也不做。表达式“3/2”是有效的,并且在运行时会产生一个整数。