请祥解一条语句

来源:百度知道 编辑:UC知道 时间:2024/05/27 03:03:10
我在看书的时候发现这样一条语句,
float a[30];
float i=0;
do{中间过程忽略}while(*(a+i++)>0)
书上是说先求a+i的值,然后按*(a+i)得到a[i]的值,如大于0,则继续执行循环'完成这些运算后,i的值加1.
我的问题是为什么得到a[i]的值后就加1,然后判断是否大于0呢??

不是“a[i]”加1,而是i+1
"do{中间过程忽略}while(*(a+i++)>0)" 这条语句的解释是:
if(a[i]>0){
i = i + 1;
执行循环中的过程;
}
else{
i = i + 1;
退出循环;

这一段程序不规范,通常float a[30];是需要初初值的,c\c++,就是这样的如果你不清空数组,他在新开的数组中会是随机值

跟上下文有关系,从你给的东西看不出什么.

(*(a+i++)>0的正确解释是这样的:
首先是求*(a+i)的东西,因为i++,++是在后面的,所以先取值后加1.*(a+i)即a[i]
此时i已经是加1后的值了.
然后判断a[i]是否大于0,是则停止循环.
这句话把递增和判断都放在一起了.
比较通俗的话可以这样写:
do
{
//代码
i++;
}
while( a[i-1] > 0 ); //因为i已经加过1了,请注意这里不能用i--
或者
while( a[ i ] > 0 )
{
//代码
i++;
}
当然,如果a[0]就不满足>0的话,两者是有区别.do while会多做一次代码,while什么都不会做.这样的话,就只能用do while了.

其实这句话应该这么看

while(*(a+i)>0);
对电脑来说是判断这句。

执行完这句以后,i++;也就是day自加1。程序员喜欢这么写,把两句话夹在一起了,其实是两句话而已。