2012/1/13 《C++ Primer Plus》第五章:循环和表达式 学习笔记
2012-01-14 17:09
323 查看
《C++ Primer Plus》第五章学习笔记
57:C++表达式是值或值与操作符的组合,每个C++表达式都有值。
58:++x; x++;这两条语句作用效果相同。对于内置类型,不会有差别。但是对于类而言,前缀将值加一,返回;后缀先复制一个拷贝,将原值加一,返回拷贝。所以前缀比后缀效率更高。
59:前缀递增、前缀递减和“*”操作符优先级相同,以从右到左的方式进行结合。后缀递增和后缀递减的优先级相同,但比前缀操作符的优先级高,这两个操作符以从左到右的方式进行结合。
60:如果在语句块定义了一个新的变量,则仅当程序执行该语句块的语句时,该变量才存在。如果语句块定义了一个外部语句块中已存在的变量,则新变量暂时代替旧变量。
61:逗号表达式:
1、最常见用途是将两个或更多的表达式放到一个for循环表达式中。
2、它确保先计算第一个表达式,然后计算第二个表达式,比如i = 20 , j = 2* i // i==20,j==40
3、逗号表达式的值是第二部分的值。
62:六种关系表达式,不能用于C风格字符串比较。比如,char word[] = “mate”; word == “mate”,错误,==左右两端都是地址,地址显然不同。(用strcmp())
63:While循环可以用于让程序等待一段时间,以达到某种目的,比如用来控制时间的小程序:
#include <iostream>
#include <ctime>
int main()
{
using namespace std;
cout << "Enter the delay time, in second : ";
double sec;
cin >> sec; //个人理解:
clock_t delay = sec * CLOCKS_PER_SEC; //一共要经历的时钟周期数,CLOCKS_PER_SEC为符号常量
cout << "starting\a\n";
clock_t start = clock(); //当前计算机的时钟周期数
while(clock()-start < delay);
cout << "Done\a\n";
return 0;
}
64:C++为类型建立别名的方式有两种。
一种是使用预处理器:#define BYTE char ;
第二种使用typedef,比如typedef char byte。
对于第一种方式,如果有:#define fp float *; fp pa,pb; 则预处理器置换改声明为:float * pa,pb,所以pa为指针,pb仅为float变量。所以typedef是更好的选择。
65:For循环中的空测试条件被视为true。
66:读取char值时,与读取其他基本类型一样,cin将忽略空格和换行符。(可以用cin.get(char)补救,其参数类型为引用&)。
67:当cin出现在需要bool值的地方(如在while循环的测试条件中),cin将被一个转换函数转换成bool值。如果最后一次读取成功了,则转换为true;否则为false。
68:如果用char* a = “abcde”;则不能通过a和下标索引来修改字符串的值,是不是因为此时”abcde”存储在内存中的常量存储区,所以不能修改?
书中的错误:
P115 文字第一行”ios:boolalpha”少一个冒号;
P121根据英文版,文字第二段的“现”应改为“先”;
P125最下面第三个for循环多了一个括号;
P127 5.2.2文字第三段第五行”strcpm()”;
P129 这个程序没印完整;
P135倒数第二行while前面漏了个{;
P144最后一行的25和cities应交换;
57:C++表达式是值或值与操作符的组合,每个C++表达式都有值。
58:++x; x++;这两条语句作用效果相同。对于内置类型,不会有差别。但是对于类而言,前缀将值加一,返回;后缀先复制一个拷贝,将原值加一,返回拷贝。所以前缀比后缀效率更高。
59:前缀递增、前缀递减和“*”操作符优先级相同,以从右到左的方式进行结合。后缀递增和后缀递减的优先级相同,但比前缀操作符的优先级高,这两个操作符以从左到右的方式进行结合。
60:如果在语句块定义了一个新的变量,则仅当程序执行该语句块的语句时,该变量才存在。如果语句块定义了一个外部语句块中已存在的变量,则新变量暂时代替旧变量。
61:逗号表达式:
1、最常见用途是将两个或更多的表达式放到一个for循环表达式中。
2、它确保先计算第一个表达式,然后计算第二个表达式,比如i = 20 , j = 2* i // i==20,j==40
3、逗号表达式的值是第二部分的值。
62:六种关系表达式,不能用于C风格字符串比较。比如,char word[] = “mate”; word == “mate”,错误,==左右两端都是地址,地址显然不同。(用strcmp())
63:While循环可以用于让程序等待一段时间,以达到某种目的,比如用来控制时间的小程序:
#include <iostream>
#include <ctime>
int main()
{
using namespace std;
cout << "Enter the delay time, in second : ";
double sec;
cin >> sec; //个人理解:
clock_t delay = sec * CLOCKS_PER_SEC; //一共要经历的时钟周期数,CLOCKS_PER_SEC为符号常量
cout << "starting\a\n";
clock_t start = clock(); //当前计算机的时钟周期数
while(clock()-start < delay);
cout << "Done\a\n";
return 0;
}
64:C++为类型建立别名的方式有两种。
一种是使用预处理器:#define BYTE char ;
第二种使用typedef,比如typedef char byte。
对于第一种方式,如果有:#define fp float *; fp pa,pb; 则预处理器置换改声明为:float * pa,pb,所以pa为指针,pb仅为float变量。所以typedef是更好的选择。
65:For循环中的空测试条件被视为true。
66:读取char值时,与读取其他基本类型一样,cin将忽略空格和换行符。(可以用cin.get(char)补救,其参数类型为引用&)。
67:当cin出现在需要bool值的地方(如在while循环的测试条件中),cin将被一个转换函数转换成bool值。如果最后一次读取成功了,则转换为true;否则为false。
68:如果用char* a = “abcde”;则不能通过a和下标索引来修改字符串的值,是不是因为此时”abcde”存储在内存中的常量存储区,所以不能修改?
书中的错误:
P115 文字第一行”ios:boolalpha”少一个冒号;
P121根据英文版,文字第二段的“现”应改为“先”;
P125最下面第三个for循环多了一个括号;
P127 5.2.2文字第三段第五行”strcpm()”;
P129 这个程序没印完整;
P135倒数第二行while前面漏了个{;
P144最后一行的25和cities应交换;
相关文章推荐
- 2012/1/13 《C++ Primer Plus》第五章:循环和表达式 学习笔记
- C++ Primer Plus学习:第五章 循环和关系表达式(2)
- 《C++ Primer Plus》第5章 循环和关系表达式 学习笔记
- C++ Primer Plus 学习笔记 第五章 编程练习
- C++ Primer Plus学习:第五章 循环和关系表达式(1)
- C++ Primer Plus学习:第五章 循环和关系表达式(3)
- C++ Primer Plus 学习笔记 第五章 01 for循环 递增运算符和递减运算符 复合语句,逗号运算符 C风格字符串比较、string类字符串比较
- 《C++ Primer Plus(第六版)》(6)(第五章 循环和关系表达式 笔记)
- 【学习笔记】C++primer plus 8.函数探幽
- C++ Primer Plus学习笔记之STL函数对象
- C++ Primer plus 学习笔记之 数组、array和vector异同点
- 【C++】学习笔记十四——C++ primer plus第六版第4章编程练习
- [学习笔记][C++Primer Plus]String类的使用
- C++ primer plus(第六版)学习笔记、习题答案(4)
- 《C++ Primer Plus》10.2 抽象和类 学习笔记
- 《C++ Primer Plus(第六版)》(1)(第二章 开始学习C++ 笔记和答案)
- 2012/2/3 《C++ Primer Plus》第十四章:C++中的代码重用 学习笔记
- 2012/2/7 《C++ Primer Plus》第十六章:string类和标准模板库 学习笔记
- 【学习笔记】C++primer plus 13.继承
- C++ Primer Plus(第六版)--学习杂记(第五章)