微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

#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(假设您输入的值与您在代码中初始化变量的值相同)。

,

我不知道为什么它会打印 4 而不是 -1。

好吧,严格来说代码不能说是打印 4. 也不是 -1。

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

您的函数通过添加 a 来改变 b。但是当您调用 printf 时,您再次减去 b,因此您打印 a原始值,这是 scanf 的第一个输入。

我想在指针 *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",&b) != 2) exit(1);

还要注意,在功能上这与:

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

您可以使用转换语法:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。