5.2.1
#include<iostream>
using namespace std;
int main()
{
int a,x;
for(a=0,x=0;a<=1 &&!x++;a++)
/*
bool取值false和true,0为false,非0为true
a<=1成立然后执行后面的!x++
!x++的执行顺序是:!x(x!=true?)成立,x自增为1
然后执行循环体内的语句a++,a自增为1。然后再执行for里的a++。a自增为2。
此时a=2,x=1
a<=1不成立了!跳出循环
*/
{
a++;
}
cout<<a<<" "<<x<<endl;//C++输出空格的形式是这样的哦。
return 0;
}
运行结果:
#include<iostream>
using namespace std;
int main()
{
int a,x;
for(a=0,x=0;a<=1&&!x++;)
{
a++;
/*
a<=1成立然后执行后面的!x++
!x++的执行顺序是:!x(x!=true?)成立,x自增为1
然后执行循环体内的语句a++,a自增为1。
此时a=1,x=1
a<=1成立。执行!x++。x!=true?不成立。但是这条语句还是要执行完的。所以x还是要自增为2。
*/
}
cout<<a<<" "<<x<<endl;
return 0;
}
运行结果:
5.2.2
#include <stdio.h>
void main()
{
int b=3;
int arr[]={6,7,8,9,10};
int *ptr=arr;
//此时ptr指向6.
*(ptr++)+=123;
/*
拆分为*(ptr)=*(ptr)+123;ptr++;
*和++的优先级相等。它们的结合方向是从右到左。
此时是*(ptr)=*(ptr)+123即6+123=129
ptr++之后指向了7
*/
printf( "%d,%d\n ",*ptr,*(++ptr));
/*
这里就非常狗了。printf函数的计算是从右向左进行的。
也就是说先计算右边的*(++ptr)。ptr现在指向8了。
然后再计算左边的*ptr,也是8。
*/
}
printf函数的计算是从右向左进行的。
运行结果: