C++ 添加'++';在C++;?

C++ 添加'++';在C++;?,c++,C++,我有一段代码: for(i=0;i<10000;i++){ double number=distribution(generator); ++p[int(nintervals*number)]; } for(i=0;i它将增加内存中用int(nintervals*number)索引的数组元素的值。这相当于 ++( p[int(nintervals*number)] ); | \_______________________/ | | |

我有一段代码:

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

for(i=0;i它将增加内存中用
int(nintervals*number)
索引的数组元素的值。这相当于

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

它将增加内存中用
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)]);

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

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

所以这三条线是等价的:

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)]++;
p[int(nintervals*number)] += 1;
p[int(nintervals*number)] = p[int(nintervals*number)] + 1;
因此,
++
运算符不会对数组进行操作;它会对已索引数组的元素进行操作。我希望这一点很清楚

现在,如果像下面的示例中那样将
++
操作符绑定到数组,那么结果操作就完全不同了

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

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

++exp
在计算前增加
exp
的值。它与
exp++
的不同之处在于后者计算
exp
,然后增加

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

p[int(nintervals*number)]++;
p[int(nintervals*number)] += 1;
要更好地了解后缀和前缀
++
运算符之间的区别,请查看以下代码:

int a = 1;
if(a++ == 1){
    printf("yes");
}
else{
    printf("no");
}
此输出将为“是”,因为它将是布尔表达式,将首先计算布尔表达式,然后将递增
a
。另一方面:

int a = 1;
if(++a == 1){
    printf("yes");
}
else{
    printf("no");
}
输出将为“否”,因为
a
将首先递增,然后计算布尔表达式


希望这有帮助!

++exp
在计算
exp
之前增加
exp
的值。它与
exp++
不同,后者计算
exp
,然后增加

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

p[int(nintervals*number)]++;
p[int(nintervals*number)] += 1;
要更好地了解后缀和前缀
++
运算符之间的区别,请查看以下代码:

int a = 1;
if(a++ == 1){
    printf("yes");
}
else{
    printf("no");
}
此输出将为“是”,因为它将是布尔表达式,将首先计算布尔表达式,然后将递增
a
。另一方面:

int a = 1;
if(++a == 1){
    printf("yes");
}
else{
    printf("no");
}
输出将为“否”,因为
a
将首先递增,然后计算布尔表达式


希望这有帮助!

你的代码在.@ HANSPASAN井后面,++Sale[index ] < /C>不太WTF。如果你没有意识到这是什么,那么他显然不知道基本C++语法。(这说明我对这个问题的惊讶已经得到了一个投票。)事实上,程序不是C,所以我删除了C标签。你的代码在.@ HASPASAN井后面, > +数组[index ] /COD>不完全是WTF。如果你没有意识到这是什么,那么他显然不知道基本的C++语法。(这说明我对这个问题的惊讶已经得到了一个投票。)实际上,该程序不是C,所以我删除了C标记。在这种情况下,
exp++
++exp
相同。没有区别。@haccks我注意到:)更新了答案以作进一步解释。谢谢在这种情况下,
exp++
++exp
相同。没有区别。@haccks我注意到:)更新了答案以作进一步解释。谢谢很抱歉,我编辑了你的答案。我把它和我的混淆了:)不过我没有修改任何东西。很抱歉给您带来不便:)很抱歉我编辑了您的答案。我把它和我的混淆了:)不过我没有修改任何东西。很抱歉给您带来不便:)