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

3/2 产生一个等于 1 的整数结果。这样的行中永远没有“分数”。

arr2[3/2] ==== arr2[1]
于 2013-03-13T14:07:45.757 回答
0
  1. 数组索引应该是整数。如果您使用浮点类型,它将被强制转换为整数。
  2. integer1 / integer2 在 c/c++ 中产生另一个整数。
于 2013-03-13T14:19:29.500 回答
0

当它看到 arr2[3/2] 时,编译器会做什么?

编译器什么也不做。表达式“3/2”是有效的,并且在运行时会产生一个整数。

于 2013-03-13T14:25:29.437 回答