繁体   English   中英

*a+=*b 是否与 int sum = *a+*b 其中 sum = *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+=*bint 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM