[英]In C++, is A+=B preferable to A=A+B in the same way ++A is to A++?
[英]Is *a+=*b same as int sum = *a+*b where sum = *a?
#include <stdio.h>
#include <cmath>
void update(int *a,int *b) {
*a = *a + *b;
int absDifference = *a - *b > 0 ? *a - *b : -(*a - *b);
*b = absDifference;
}
/*
void update(int *a,int *b) {
int sum = *a + *b;
int absDifference = *a - *b > 0 ? *a - *b : -(*a - *b);
*a = sum;
*b = absDifference;
} */
int main() {
int a, b;
int *pa = &a, *pb = &b;
scanf("%d %d", &a, &b);
update(pa, pb);
printf("%d\n%d", a, b);
return 0;
}
上层功能不适用于hackerrank,但评论功能正在工作。 我不明白其中的区别。
*a+=*b
和int sum = *a+*b
其中sum = *a
之间没有区别。
但! 你把你的条件检查放在哪里有很大的不同。
在第一功能, *a
被添加有*b
,然后条件检查为*a - *b
这也不过是原始(或旧的)值*a
。
*a = *a + *b;
int absDifference = *a - *b > 0 ? *a - *b : -(*a - *b);
在第二个函数中, *a
不变。 只有sum
被更新为*a + *b
。 这里的条件是检查原始*a
减去*b
。 只有在此条件检查之后, *a
才会被更新。
int sum = *a + *b;
int absDifference = *a - *b > 0 ? *a - *b : -(*a - *b);
*a = sum;
具有中间sum
变量的第一个函数的等效项是:
int sum = *a + *b;
*a = sum;
int absDifference = *a - *b > 0 ? *a - *b : -(*a - *b);
这对你不起作用。
尝试使用此功能。
int absDifference = *a - *b > 0 ? *a - *b : -(*a - *b);
*a = *a + *b;
*b = absDifference;
在你的上层函数中*a = *a + *b;
*值已更改。 所以int absDifference = *a - *b > 0 ? *a - *b : -(*a - *b);
int absDifference = *a - *b > 0 ? *a - *b : -(*a - *b);
这个语句的结果和follow函数的结果不一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.