如何找到两个指针值的差异
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);
我正在学习 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);