如何找到两个指针值的差异

How To Find Difference Of Two Pointer Values

我正在学习 C 编程,目前正在学习 Pointers。

#include <stdio.h>

void update(int *a,int *b) {
        *a = *a + *b;
        //*b = *a - *b;
        printf("%d", *a - *b);

}

int main() {
    int a = 4, b = 5;
    int *pa = &a, *pb = &b;
    
    scanf("%d %d", &a, &b);
    update(pa, pb);
 
    return 0;
}

我不知道为什么它打印 4 而不是 -1。我想在指针 *b 中分配它们的差异。感谢任何提示。

在你的情况下,

    *a = *a + *b;
    cout << *a - *b;

*b的值加到*a上,再减去*b,所以和

本质上是一样的
    cout << *a + *b -*b;    

    cout << *a;

4(假设您输入的值与您在代码中初始化变量的值相同)。

您可以使用转换语法:

int value;
value = (int)(*a) - (int)(*b);
printf(value);

这应该可以解决问题。但是如果你想获得绝对值,那么你需要一个 IF-ELSE 语句,像这样:

int value;
if(*a > *b)
    value = (int)(*a) - (int)(*b);
else
    value = (int)(*b) - (int)(*a);

printf(value);

如果您尝试通过引用模拟您在 update(pa, pb) 中调用了错误的函数;

通过调用 update 你是 运行 你只需要像这样将“更新”值重新分配回原始值位置的函数:update(&a, &b);

更新值后打印值 a,您将得到 -1

I have no idea why it prints 4 instead of -1.

嗯,严格来说代码不能说打印 4. 也不能说 -1.

该代码将打印您在控制台中键入的第一个(整数)值(由于 scanf 语句)。

您的函数通过添加 b 来更改 a。但是当你调用 printf 你再次减去 b 所以你打印 原始 a 这是 [=15= 的第一个输入].

I want to assign their difference in pointer *b

嗯,那就替换:

    *a = *a + *b;
    //*b = *a - *b;

    //*a = *a + *b;
    *b = *a - *b;

现在 b 包含 scanf 读取的值之间的差异。要打印它,只需执行以下操作:

printf("difference between scan'ed values: %d", *b);

顺便说一句:为了获得良好的编码风格,请进行以下更改:

scanf("%d %d", &a, &b); --> if(scanf("%d %d", &a, &b) != 2) exit(1);

另请注意,这在功能上与以下内容相同:

if(scanf("%d %d", pa, pb) != 2) exit(1);