C++学习笔记5 - 循环与关系表达式

来源:互联网 发布:淘宝注销后有什么后果 编辑:程序博客网 时间:2024/06/09 19:59

《C++ Primer Plus  第6版》读书笔记

知识点:

1.y = (4 + x++) - (6 + x++);

  无法保证在(4 + x++)之后x的值会加1,只能保证顺序点";"之后x值加1

2.for(n = lim; n > 0; n--)  与 for(n = lim; n > 0; --n)  效果相同

   如果是内置类型,前缀与后缀效率相同。如果是自定义类型前缀的效率更高,以为后缀需要创建副本。

3.

   前缀递增和前缀递减和解引用优先级相同;

   后缀递增和递减比前缀优先级高;

double arr[5] = { 10.1, 20.1, 30.1, 40.1, 50.1 };double *p = arr;double *q = arr;double *a = arr;double *b = arr;cout << "arr[0]:" << arr[0] << " arr[1]:" << arr[1] << endl;cout << "*++p = " << *++p << endl;    //  20.1  - 先加1 在取值cout << "arr[0]:" << arr[0] << " arr[1]:" << arr[1] << endl;cout << "++*q = " << ++*q << endl;      //  11.1  - 先取值在加1cout << "arr[0]:" << arr[0] << " arr[1]:" << arr[1] << endl;cout << "(*a)++ = " << (*a)++ << endl;  //  11.1  - 先取值在加1cout << "arr[0]:" << arr[0] << " arr[1]:" << arr[1] << endl;cout << "*b++ = " << *b++ << endl;      //  12.1  - 位置顺序点之后才移动cout << "arr[0]:" << arr[0] << " arr[1]:" << arr[1] << endl;return 0;

结果:

arr[0]:10.1 arr[1]:20.1
*++p = 20.1
arr[0]:10.1 arr[1]:20.1
++*q = 11.1
arr[0]:11.1 arr[1]:20.1
(*a)++ = 11.1
arr[0]:12.1 arr[1]:20.1
*b++ = 12.1         // b++ 下个顺序点才变化
arr[0]:12.1 arr[1]:20.1
4. -= += *= /= %=

5.语句块

   语句块中定义的变量,在语句块结束后失效,语句块中可以运行外部变量

   int main()

  {

        int a;

        {

            int x = 1;

            cout << x <<endl;

            cout << a <<end; //ok

        }

        cout << x <<endl;  //invalid

  }

6.“,” 逗号是顺序点,保证逗号前的表达式运算完

  i = 20, j = 2 + i;   

  j结果 40

  cats = 17, 240;  相当( cats = 17), 240  240 不起作用

  cats = (17 , 240);  // cats = 240

7.基于范围的for循环

double arrf[5] = { 10.1, 20.1, 30.1, 40.1, 50.1 };for (double x : arrf){cout << x << endl;}for (double &x : arrf){x *= 0.5;cout << x << endl;}for (int x : {1, 2, 3, 4}){cout << x << endl;}
8.文件结束 “EOF”  win32表示EOF为 <Ctrl> + <Z>  linux表示EOF为<Ctrl> + <D>

9.cin.fail() == false 监测EOF, cin.clear() 清除 EOF

10.“!=” 优先级高于“=”

1 0
原创粉丝点击