程序员面试宝典第5章:程序设计基本概念(例题5.2)

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函数的计算是从右向左进行的。

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34941153/article/details/90044184
今日推荐