C++ primer plus 第五章笔记

复合语句

因为循环体必须是一条语句,但是使用过程中,多条语句也是不可避免的。因此就可以将多条语句,利用一对花括号来构造一条复合语句(也称为代码块,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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值