- 已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是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
为什么会发生这种情况?
对于相同的代码,我不应该得到相同的输出吗?
2条答案
按热度按时间eufgjt7s1#
这两个代码片段并不相同-一个执行sum += *(x+i),另一个执行sum += *(x+1)(用1代替i)
gjmwrych2#
两个代码不相同。
在test1中,您将向指向
x[1]
的指针添加1,在test2中,您将向x
的指针添加i
,x
的指针将在test2的每次迭代中指向ith
元素,在test1中,答案将包含垃圾值的加法。