为什么C中的两个相同代码会给予我不同的输出?[已关闭]

4xrmg8kj  于 2023-01-20  发布在  其他
关注(0)|答案(2)|浏览(125)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我正在学习C语言中的指针,所以我编写了这段代码来根据用户的输入进行简单的求和计算。

  • test * 文件:
#include <stdio.h>

int main() {

   int i, x[6], sum = 0;

   printf("enter 6 numbers: ");

   for(i = 0; i < 6; ++i) {
      scanf("%d", x+i);
      sum += *(x+1);
   }


   printf("Sum = %d", sum);

   return 0;
}

当我运行代码时,我将1 2 3 4 5 6作为用户输入,它基本上执行1 + 2 + 3 + 4 + 5 + 6。

┌─[✗]─[shogun@parrot]─[~/Documents]
└──╼ $cd "/home/shogun/Documents/" && gcc test.c -o test && "/home/shogun/Documents/"test
enter 6 numbers: 1 2 3 4 5 6
Sum = 22029
    • 然而**我有另一个代码,名为 * test2 *,它与前一个代码相同。
#include <stdio.h>
int main() {

  int i, x[6], sum = 0;

  printf("Enter 6 numbers: ");

  for(i = 0; i < 6; ++i) {
      scanf("%d", x+i);
      sum += *(x+i);
  }

  printf("Sum = %d\n", sum);

  return 0;
}

但是当我运行代码,输入相同的数字1,2,3,4,5,6时,结果是21.

┌─[✗]─[shogun@parrot]─[~/Documents]
└──╼ $cd "/home/shogun/Documents/" && gcc test2.c -o test2 && "/home/shogun/Documents/"test2
Enter 6 numbers: 1 2 3 4 5 6
Sum = 21

为什么会发生这种情况?
对于相同的代码,我不应该得到相同的输出吗?

eufgjt7s

eufgjt7s1#

这两个代码片段并不相同-一个执行sum += *(x+i),另一个执行sum += *(x+1)(用1代替i)

gjmwrych

gjmwrych2#

两个代码不相同。
在test1中,您将向指向x[1]的指针添加1,在test2中,您将向x的指针添加ix的指针将在test2的每次迭代中指向ith元素,在test1中,答案将包含垃圾值的加法。

相关问题