在C++数组之前添加'++'时会发生什么?

What happens when adding '++' before array in C++?

本文关键字:什么 添加 数组 C++      更新时间:2023-10-16

我有这段代码:

for(i=0;i<10000;i++){
   double number=distribution(generator);
    ++p[int(nintervals*number)];
}

但我不知道++如何影响数组。有人能解释一下吗?

它将递增内存中用int(nintervals*number)索引的数组元素的值。这相当于

++( p[int(nintervals*number)] );  
 |  _______________________/
 |             |
 |             V 
 |             Array element is evaluated first
 |
 V 
 then ++ operator increment that array element 

++只是一个运算符,将在您的示例中对数组元素进行操作。

所以这三行是等价的:

p[int(nintervals*number)]++;
p[int(nintervals*number)] += 1;
p[int(nintervals*number)] = p[int(nintervals*number)] + 1;

因此,++运算符不对数组进行操作;它对已索引的数组元素进行操作。 我希望这是清楚的。

现在,如果将 ++ 运算符绑定到数组,如以下示例所示,则生成的操作将大不相同。

(++p)[int(nintervals*number)];

这将递增指针p,然后索引到 (p+1) 指向的内存中。 该索引处的值不会更改,因此该代码的结果是简单地递增指针p。 这可能是您想要的,也可能不是您想要的。 可能不是,但这只有在您与我们分享您如何分配和分配指针p及其相邻内存时才能确定。

运算符

的优先级使该代码等效于:

++(p[int(nintervals*number)]);

也就是说,预增量适用于数组中该位置的元素,而不是数组本身。

++exp

评估之前递增exp的值。它与exp++的不同之处在于,后者评估exp,后来递增。

在代码中,您正在访问数组中的元素并将其递增。它可以通过另外两种方式重写:

p[int(nintervals*number)]++;
p[int(nintervals*number)] += 1;

为了更好地了解后缀和前缀++运算符之间的区别,请查看以下代码:

int a = 1;
if(a++ == 1){
    printf("yes");
}
else{
    printf("no");
}

此输出将为"yes",因为它将首先计算布尔表达式,然后a将递增。另一方面:

int a = 1;
if(++a == 1){
    printf("yes");
}
else{
    printf("no");
}

输出将为"否",因为a将首先递增,然后计算布尔表达式。

希望这有帮助!