如何解决如何找到两个指针值的差异
我正在学习 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 举报,一经查实,本站将立刻删除。