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我注意到:)更新了答案以作进一步解释。谢谢很抱歉,我编辑了你的答案。我把它和我的混淆了:)不过我没有修改任何东西。很抱歉给您带来不便:)很抱歉我编辑了您的答案。我把它和我的混淆了:)不过我没有修改任何东西。很抱歉给您带来不便:)