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

C++ Primer Plus 学习笔记 第五章 01 for循环 递增运算符和递减运算符 复合语句,逗号运算符 C风格字符串比较、string类字符串比较

2017-03-09 09:17 633 查看
C++ Primer Plus 学习笔记 第五章 01 for循环  递增运算符和递减运算符 [b]复合语句,逗号运算符 [b]C风格字符串比较、string类字符串比较

声明:本文整理自《[b]C++ Primer Plus

[/b][/b][/b]
/*求前16个阶乘*/
#include<iostream>
const int ArSize = 16;
int main()
{
    using namespace std;

    long long factorials[ArSize];
    factorials[0]=factorials[1]=1LL;
    for(int i=2;i<ArSize;i++)
    {
        factorials[i]=factorials[i-1]*i;
    }
    for(int i=0;i<ArSize;i++)
    {
        cout<<i<<"!="<<factorials[i]<<endl;
    }

}

一、for循环
1.基本知识

<
4000
div style="background-color:inherit;">    for (j=0,i=word.size()-1;j<i;--i,++j)
    {
        cout<<i<<" "<<j<<endl;
        temp=word[i];
        word[i]=word[j];
        word[j]=temp;
    }

1.设置初始值 j=0,i=word.size()-1; 初始化只执行一次。
2.进行测试,看是否进行循环 j<i;
3.执行循环 执行大括号里的内容
4.更新用于测试的值。 --i,++j;然后再进行2。



cout在显示bool值之前将它们转换为int,但cout.setf (ios::boolalpha) 函数调用了一个标记,该标记命令cout显示true和false。

可以在for循环中声明变量,当程序离开循环后,变量消失。

2.递增运算符和递减运算符
a++ 使用a的当前值计算表达式,然后将a的值加1,
++b 先把b加1,然后使用新的值来计算表达式。

副作用:计算表达式时对某些东西(如存储在变量中的值)进行了修改;
顺序点:程序执行过程中的一个点。在这里,进入下一步之前将确保对所有的副作用都进行了评估。
分号就是一个顺序点,在处理下一条语句之前,赋值运算符、递增运算符和递减运算符的修改都必须完成 。
int guess = 8;
while (guess++ < 10)//和10比较后+1,是一个完整的测试条件,确保副作用(将guess加1在cout之前完成)
    cout << guess << endl;//guess = 9;

前缀格式和后缀格式
for (i=1; i>0; i--) 和 for (i=1; i>0; --i) 
i--和--i的副作用将在程序进入下一步之前完成,前缀格式和后缀格式的最终效果相同。但后缀版本要复制一个副本,将其加1,然后将复制的副本返回。前缀版本的效率较高。

递增递减运算符合指针
前缀递增、前缀递减和解除引用运算符(*)的优先级相同,以从右到左的方式进行结合。
pt指向arr[2]
*++pt 先把pt加1,然后将*应用于被递增后的pt 等价于 *(pt+1),pt指向arr[3]
++*pt 等价于++(*pt),pt指向arr[2]
x = *pt++;等价于*(pt+1),pt指向arr[3]
后缀递增和后缀递减的优先级相同,比前缀运算符的优先级高。以从左到右的方式进行结合。

3.复合语句,逗号运算符
如果一个语句块中声明一个变量,而外部语句块中也有一个这种名称的变量,在声明位置到内部语句块结束的范围之内,新变量将隐藏旧变量;然后旧变量再次可见。



逗号运算符 :允许将两个表达式放到C++句法只允许放一个表达式的地方。

    for (j=0,i=word.size()-1;j<i;--i,++j)

    {

        cout<<i<<" "<<j<<endl;

        temp=word[i];

        word[i]=word[j];

        word[j]=temp;

    }

== 等于运算符
= 赋值运算符

4. C风格字符串比较、string类字符串比较
#include <cstring>提供了strcmp()函数原型,接收两个字符串地址作为参数,参数可以是指针、字符串常量或字符串数组名。如果字符串相同,返回0。



string word = "?mate";
for (char ch = 'a'; word != "mate"; ch++)
{
    cout << word <<endl;
    word[0] = ch;
}
使用string类重载运算符!=的条件:至少有一个操作数为string对象,另一个操作数可以是string对象,或是c-风格字符串。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: