在C中增加求值后的变量
代码1: 产出:1234 代码2:在C中增加求值后的变量,c,C,代码1: 产出:1234 代码2: i = 0; while ( arr[i++] != EOF ) printf("%d", i); 输出:01 2 3 在上面的代码中,arr[]=“//\n\0” 但是,我假设I++应该首先分配I和increment,对吗 i、 e 那么,代码1中到底发生了什么,以及为什么它的行为与代码2不同呢?好的,在代码中,您在递增后打印i 循环条件之后,i立即递增并变为1。打印时,i已递增。这就是为什么与代码2相比,它的打印方式有所不同 当您执行此操作时,
i = 0;
while ( arr[i++] != EOF )
printf("%d", i);
输出:01 2 3
在上面的代码中,arr[]=“//\n\0”
但是,我假设I++应该首先分配I和increment,对吗
i、 e
那么,代码1中到底发生了什么,以及为什么它的行为与代码2不同呢?好的,在代码中,您在递增后打印
i
循环条件之后,
i
立即递增并变为1。打印时,i
已递增。这就是为什么与代码2相比,它的打印方式有所不同 当您执行此操作时,会增加i
,因此当您要打印它时,它当然会增加
而是打印出数组元素,这样您就知道得到了正确的数组元素:
if i = 1
j = i++
j = 1 (Not 2)
…也许我没抓住你提问的重点,但是:
那么,代码1中到底发生了什么,为什么它的行为不像代码2?
点击i++
后,它将递增并将新值保存到i
中。因此:
i = 0;
char c;
while ( (c = arr[i++]) != EOF )
printf("%c", c);
如果您询问的是
i++
vs++i
执行增量(前或后)后的行,则会存储新值。因此,在第一种情况下,增量是在while检查期间完成的,因此它保存在该点 有趣的是,语言的创造者竟然不知道这样一件基本的事情。这可能是因为当你死后,你的大脑停止工作了吗?;)@这是邪恶的:PSorry,对于那些不熟悉它的人来说,dennisritchie是C语言的两个“发明者”之一。布莱恩·克尼汉是另一个。发明家丹尼斯于2011年去世。显然,这个问题的作者要么是丹尼斯从另一个角度说话(只是在欺骗我们),要么就是碰巧这么称呼自己(或者是用户的真名!)对不起,如果这有点低级趣味的话……我是鬼。。我死后当然忘了所有的C
i = 0;
char c;
while ( (c = arr[i++]) != EOF )
printf("%c", c);
i = 0; // i = 0
while ( arr[i++] != EOF ) // i = 1, 2, etc now before the print
printf("%d", i); // the incremented i is printed
i = 0; // i = 0
while ( arr[i] != EOF )
{
printf("%d", i); // i still = 0 and that's printed
i++; // now i = 1, 2, etc
}