c++学习笔记——递增运算符(++)和递减运算符(--)

#include <iostream>
int main()
{
    using namespace std;
    int a = 20;
    int b = 20;
    cout << "a = " << a << " : b = " << b <<"\n";
    cout << "a++ = " << a++ << " : b++ =  " << ++b <<"\n";
    //从输出结果来看,a++意味着使用a的当前值计算表达式,然后将a的值加1,例如:
    int x = 5;
    int y = x++;//先将x赋值给y,之后x再加1,所以y=5,而x=6
    cout << " x = " << x <<" , y = " << y <<endl;
    //从输出结果来看,++b意味先将b的值加1,然后使用新的值来计算表达式,例如:
    int z = 5;
    int g = ++z;//现将z的值加1,之后将新计算出的z值赋给g,所以z=6,g=6
    cout << " z = " << z <<" , g = " << g <<endl;

    cout << "a = " << a << " : b = " << b << "\n";

    int f = 10;
    while (f++ < 15)
        cout << f << endl;//
    
    
    return 0;
}
a = 20 : b = 20
a++ = 20 : b++ =  21
 x = 6 , y = 5
 z = 6 , g = 6
a = 21 : b = 21
11
12
13
14
15

副作用和顺序点

副作用:定义为在计算表达式时对某些东西(如存储在变量中的值)进行了修改。

顺序点:定义为程序执行过程中的一个点,这意味着程序处理下一条语句之前将对所有的副作用都进行了评估。在c++中,语句中的分号就是一个顺序点,这意味着程序处理下一条语句之前,赋值运算符、递增运算符以及递减运算符执行的所有的修改都必须完成。另外,任何完整的表达式末尾都是一个顺序点。

具体可以参考下面这篇博客:

http://t.csdn.cn/KDEga

前缀格式和后缀格式

前缀函数定义为将值加1,然后返回结果;后缀版本首先赋值一个副本,将其加1然后将复制的副本返回。因此对类而言,前缀版本的效率比后缀的高。

#include <iostream>
// 可以将递增或者递减运算符和指针结合使用
int main()
{
    using namespace std;
    double arr[5] = {21.1, 32.8, 23.4, 45.2, 37.4};
    double *pt = arr; // 这里指针变量pt指向数组的arr第一个元素21.1
    ++pt;             // 将指针的值增加其指向的数据类型占用的字节数,这里pt指向指针的第二个元素32.8
    double x = *++pt;
    cout << " x = " << x << endl;
    // 将*和++同时用于指针时,前缀递增和前缀递增以及接触引用运算符的优先级相同,以从右向左的顺序进行结合;
    // 后缀递增和后缀递减的优先级相同,但是比前缀要高。所以后缀递减和后缀递减这两个运算符以从左到右的顺序进行结合。
    // 所以*++pt意味着先将++应用于pt,然后将*应用于被递增后的pt。
    double y = ++*pt; // 以为着先取得pt指向的值,然后将这个值加1。此时pt指向arr[2],值为23.4,加1后是24.4
    cout << " y = " << y << endl << endl;
    
    cout << " (*pt)++ = " << (*pt)++ << endl;
    //后缀是先算值,再递增加1,所以输出(*pt)++ 值还是24.4,但是该语句执行完毕后*pt的值就加1(自己的理解)
    cout << " *pt =  " << *pt << endl << endl;
     // 圆括号的意思就是首先结合*,然后再结合++,结果就是25.4(24.4+1)
    
    double z = *pt++;  // 后缀运算符++的优先级更高,这意味着将运算符用于pt,而不是*pt,所以指针递增。
    // 但是后缀运算符意味着对原来的地址&arr[2]解除引用,而不是递增后的新地址解除引用,因此*pt++的值是arr[2],即25.4
    // 但是该语句执行完毕后,pt的值将为arr[3]的值。,我的理解的原因是后缀是先计算值,再递增。(没理解清楚)
    cout << " z = " << z << endl;
    cout << " *pt = " << *pt<<endl;
    return 0;
}
 x = 23.4
 y = 24.4

 (*pt)++ = 24.4
 *pt =  25.4

 z = 25.4
 *pt = 45.2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值