【问题标题】:how to get sum and absolute difference in the same function?如何在同一函数中获得总和和绝对差?
【发布时间】:2023-02-14 02:32:34
【问题描述】:

函数接收两个整数指针,int* aint* b。将 *a 的值设置为它们的总和,将 *b 的值设置为它们的绝对差。

没有返回值,也不需要返回语句。

我获得了 *a 的值,但无法获得 *b 的代码。

#include <stdio.h>
void update(int *a,int *b);


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;
}
void update(int *a,int *b) 
{
    *a+=*b;
    *b=*a-*b;
}

【问题讨论】:

  • 不要发布代码的图像,而是代码本身。

标签: c function pointers


【解决方案1】:

您可以使用临时变量来存储 *a 的值,然后使用它:

int tmp = *a;
*a += *b;
*b = abs(tmp - *b);

【讨论】:

    【解决方案2】:

    稍微清理一下。只有函数需要指针。你的主要没有。

    #include <stdio.h>
    #include <stdlib.h>  // abs()
    
    void sum_and_diff( int * a, int * b )
    {
      int sum = *a + *b;
      int diff = abs( *a - *b );
      *a = sum;
      *b = diff;
    }
    
    int main(void)
    {
      int a, b;
    
      printf( "a? " );  scanf( "%d", &a );
      printf( "b? " );  scanf( "%d", &b );
    
      sum_and_diff( &a, &b );
    
      printf( "sum = %d
    ", a );
      printf( "absolute difference = %d
    ", b );
    
      return 0;
    }
    

    【讨论】:

    • 好的答案,但我建议始终检查 scanf() 的返回值以确保正确的值。首先用零初始化变量以避免将来出现错误结果。
    • 对于家庭作业,使用scanf() 即可。对于其他任何事情,scanf() is the wrong tool。在这种情况下,用通常的方法重载 OP 没有任何好处如何得到一个整数论文。
    • 最好添加一些关于 C 函数通过引用仿真的解释。 stackoverflow.com/q/2229498/7508077
    【解决方案3】:

    一个简单的答案(最简单的?),不需要临时变量或外部函数,如abs(),是:

    void update(int *a, int *b) 
    {
        *a += *b;
        *b =  *a-*b-*b;
    }
    

    它还通过减去您刚刚添加到 *a 的“额外”*b 来修复您的代码

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 2019-09-17
      • 2015-02-10
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多