输出预测无法理解while语句

我正在寻找这个问题的解释。我看不懂while部分,为什么会打印6。

#include <stdio.h>
#include<stdlib.h>

int main() 
{
    int array[] = {1,2,4,3};
    int *p,sum = 0;

    p = &array[0];

    while (*p++)
        sum += *p;

    printf("%d\n",sum);
    return 0;
}
cache03 回答:输出预测无法理解while语句

这是while循环更易读的形式:

while (*p != 0)
{
  p = p + 1;   // you can put "p++;" here,which has the same effect
  sum += *p;
}

现在您应该自己理解。

,

最初,指针p指向数组的第一个元素。

p = &array[0];

但是,在评估while语句的条件之后

while(*p++)

指针被递增,然后指向数组2的第二个元素。

在循环体内使用了增量指针。

所以您将拥有

2 + 4

数组的第四个元素等于0。因此,循环将停止其迭代。

如果将其重写为for循环,则可以通过以下方式考虑while循环中的条件

#include <stdio.h>

int main(void) 
{
     int array[] = {1,2,4,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 += *tmp;

代替

sum += *p;

然后您将获得等于7的预期结果。

,

您要从数组的第一个元素中丢弃该值。

这就是您看到答案6的原因

您对元素之后求和,您已经移至数组的下一个元素

您应该在迭代结束时增加指针

while(*p){
  sum += *p;
  p++;
}

for( ; *p ; p++){
  sum += *p;
}
,

循环运行直到遇到零值为止。但是,您需要先增加指针,然后再将其指向的对象添加到“ sum”。

因此循环将第二个和第三个元素相加,并在第四个元素处停止。

则总和的值为:0 + 2 + 4 = 6

,

只需将您的while循环修改为

while(*p)
sum += *p++;

说明

++,––是一元运算符,用于递增或递减变量的值1。

它们可以用作postfixprefix

但这不只是您的问题。 While循环在收到0时终止。您的数组包含其中之一。

所以,改为使用

for(int i=0;i<7;i++)  //7 -> size of array
sum += *p++;

o / p-14

本文链接:https://www.f2er.com/3057955.html

大家都在问