您的位置:首页 > 编程语言 > C语言/C++

C++ primer plus 第五章笔记

2017-12-09 10:11 218 查看

复合语句

因为循环体必须是一条语句,但是使用过程中,多条语句也是不可避免的。因此就可以将多条语句,利用一对花括号来构造一条复合语句(也称为代码块,block),从而只被视为一条语句

但是复合语句还有一种有趣的特性。如果在复合语句中定义一个新的变量,则仅当程序执行该复合语句中的语句时,该变量才存在,但复合语句执行完毕之后,变量则会被释放

//P138
#include<iostream>
int main()
{
using namespace std;
int x = 20;
{                   //block starts
int y = 100;
cout << x << endl;  //ok
cout << y << endl;  //ok
}                   //block ends
cout << x << endl;  //ok
cout << y << endl;  //invalid,won't compile 此处的y是未声明和初始化的变量
return 0;
}


若是在如果在复合语句声明了一个变量,但是在复合语句外同时也声明了这个变量,则复合语句的变量的值则只会在复合语句中使用,复合语句的变量会隐藏复合语句外的变量的值,但是复合语句结束后,变量会再次可见。

//P138
#include<iostream>
int main()
{
using std::cout;
using std::endl;
using std::cin;
int x = 20;             //original x
{                       //block starts
cout << x << endl;  //use original x = 20
int x = 100;        //new x
cout << x << endl;  //use new x = 100
}                       //block ends
cout << x << endl;      //use original x = 20
cin.get();
return 0;
}


运行结果:

20
100
20


关于运算符
()
的优先级:

//P140
#include<iostream>

int main()
{
using namespace std;
int cats;
cats = 17, 240;
cout << "cats = 17, 240 = " << cats << endl;
(cats = 17), 240;
cout << "(cats = 17), 240 = " << cats << endl;
cats = (17, 240);
cout << "cats = (17, 240) = " << cats << endl;
cats = (240, 17);
cout << "cats = (240, 17) = " << cats << endl;

cin.get();
return 0;
}


输出结果

cats = 17, 240 = 17
(cats = 17), 240 = 17
cats = (17, 240) = 240
cats = (240, 17) = 17


C-风格字符串的比较

word == "mate";


首先,数组名是数组的地址。同样,右边的字符串的也是地址,因此这里同时进行了地址的比较;

但是,两个不一样的地址,可能包含同一个字符串;

因此,比较需要利用函数
strcmp()
进行比较。

strcmp()
的用法

该函数接受两个字符串地址作为参数,同时也可以是指针,字符串常量或字符数组名;

如果两个字符串相同,该函数将返回零;

如果第一个字符串按字母顺序排在第二个字符串之前,则
strcpy()
将返回一个负数值;

如果第一个字符串按字母顺序排在第二个字符串之后,则
strcpy()
将返回一个正数值。

等待一段时间:编写延时循环

首先,了解一个ANSI C和C++库中的函数
clock()
,会返回程序开始执行后所用的系统时间。

但是,
clock,()
返回的时间的单位不一定是秒;

其次,该函数返回类型在某些系统上可能是
long
,在另一些系统上可能是
usigned long
或者其他类型。

但是在头文件
ctime
提供了这些问题的解决方案。

它定义了一个符号常量—“CLOCKS_PER_SEC”,该常量等于每秒钟包含的系统时间单位数。

而且,也将
clock_t
作为
clock()
返回类型的别名,这意味着可以将变量声明未
clock_t
类型,编译器将把它转换为
long
,
unsigned int
或合适系统的其他类型。

//waiting.cpp -- using clock() in a time-delay loop
#include<iostream>
#include<ctime> //describes clock() funtion,clock_t type
int main()
{
using namespace std;
cout << "Enter the delay time,in seconds:";
float secs;
(cin >> secs).get();
clock_t delay = secs*CLOCKS_PER_SEC;    //convert to clock ticks
cout << "starting\a\n";
clock_t start = clock();
while (clock() - start < delay)             //wait until time elapses
;
cout << "done \a\n";

cin.get();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: