【问题标题】:How To Find Difference Of Two Pointer Values如何找到两个指针值的差异
【发布时间】:2021-04-21 04:42:19
【问题描述】:

我正在学习 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 中分配它们的差异。任何提示表示赞赏。

【问题讨论】:

  • 你正在学习c,但你正在写c++
  • scanf() 调用将用您在运行程序时输入到标准输入的任何整数覆盖ab 的值;因此,如果不知道您在运行程序时输入了什么,就不可能说出为什么程序会打印 4 而不是 -1。
  • 阅读 C 编译器的文档(例如 GCC,用作 gcc -Wall -Wextra -g)。然后阅读调试器的文档(例如GDB...)并使用调试器;另请阅读Modern C 并查看this C reference
  • 现有开源C程序的源代码中汲取灵感,例如GNU makeGNU bash或其他程序(例如@ 987654327@ ....)
  • 稍后,查看一些 C 标准文档,例如 n1570 或更好

标签: c pointers subtraction


【解决方案1】:

在你的情况下,

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

*b的值与*a相加,再减去*b,所以本质上是一样的

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

    cout << *a;

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

【讨论】:

  • @unobatbayar 这不是计算问题,而是数学问题。
  • 在你回答之后,这有效 *b = *a - *b - *b;
  • 问题是关于C的,你的答案是C++
  • @BasileStarynkevitch 原来的问题写错了c++
  • 谢谢,终于明白了。
【解决方案2】:

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

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

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

您的函数通过添加b 来改变a。但是当您调用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", &a, &b) != 2) exit(1);

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

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

【讨论】:

    【解决方案3】:

    你可以使用转换语法:

    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);
    

    【讨论】:

    • 为什么要选角?
    • 问题的标题已经改变,我猜。我的错。
    • 谢谢你的回答,它给了我 SIGSEGV 错误
    • printf(value); -> 不要从字面上理解。
    • 您在哪一行收到此错误? @unobatbayar
    【解决方案4】:

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

    通过调用 update 您正在运行该函数,您只需将“更新”值重新分配回原始值位置,如下所示:update(&a, &b);

    一旦你更新了值,打印值 a,你将得到 -1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多