C 输出预测无法理解while语句
我在寻找这个问题的解决办法。我无法理解while部分以及它为什么打印6C 输出预测无法理解while语句,c,loops,while-loop,output,C,Loops,While Loop,Output,我在寻找这个问题的解决办法。我无法理解while部分以及它为什么打印6 #include <stdio.h> #include<stdlib.h> int main() { int array[] = {1, 2, 4, 0, 4, 0, 3}; int *p, sum = 0; p = &array[0]; while (*p++) sum += *p; printf("%d\n", sum);
#include <stdio.h>
#include<stdlib.h>
int main()
{
int array[] = {1, 2, 4, 0, 4, 0, 3};
int *p, sum = 0;
p = &array[0];
while (*p++)
sum += *p;
printf("%d\n", sum);
return 0;
}
#包括
#包括
int main()
{
int数组[]={1,2,4,0,4,0,3};
int*p,和=0;
p=&数组[0];
而(*p++)
总和+=*p;
printf(“%d\n”,总和);
返回0;
}
这是一种更具可读性的while循环形式:
while (*p != 0)
{
p = p + 1; // you can put "p++;" here, which has the same effect
sum += *p;
}
现在您应该自己理解了。您正在丢弃数组第一个元素的值 这就是你看到答案6的原因 在移动到数组的下一个元素后,对元素求和 您应该在迭代结束时增加指针
while(*p){
sum += *p;
p++;
}
或
最初,指针
p
指向数组的第一个元素
p = &array[0];
但是,在评估while语句的条件之后
while(*p++)
sum += *tmp;
指针递增,然后指向数组的第二个元素,即2
在循环体中使用递增指针
所以你会有
2 + 4
数组的第四个元素等于0
。因此循环停止其迭代
您可以考虑while循环中的条件,如果将其重写为for循环
#include <stdio.h>
int main(void)
{
int array[] = {1,2,4,0,4,0,3};
int *p, sum=0;
p = &array[0];
for ( int *tmp = p; ( ++p, *tmp != 0 ); tmp = p )
{
sum += *p;
}
printf("%d\n",sum);
return 0;
}
而不是
sum += *p;
然后,您将得到等于
7
的预期结果。循环将一直运行,直到遇到零值为止。但是,在将指针指向的内容添加到“sum”之前,请先递增指针
因此,循环将第二个和第三个元素相加,并在第四个元素处停止
sum的值是:0+2+4=6
while(*p)
sum += *p++;
解释
++、––
是一元运算符,用于将变量的值递增或递减1
它们可以用作后缀
或前缀
但这不仅仅是你的问题。当循环接收到0
时终止。您的数组包含其中一个
因此,使用
for(int i=0;i<7;i++) //7 -> size of array
sum += *p++;
for(int i=0;i数组大小
总和+=*p++;
o/p-
14
任何非零
数字都是true
条件。因此,您的循环一直运行到第一个0
。为了您自己(也为了我们)请投入一两分钟的时间并格式化代码。问题的根本原因是忽略了C运算符的优先级,其中将执行++
,然后取消引用
for(int i=0;i<7;i++) //7 -> size of array
sum += *p++;