自增/自减学习

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/44817199 在这里学习了C中的自增和自减,但是后面学习了前缀和后缀及其混合之后,发现使用不同的编译器,其中的规则是不一样的,而且平时我们书写程序的时候也不会写这样复杂的代码,例如i+++i+++i++等,这样一方面在可读性方面很差,另一方面就是在移植性方面,不同的编译器就会出现不同的结果,所以这样写是不理想的。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/44817199

在这里学习了C中的自增和自减,但是后面学习了前缀和后缀及其混合之后,发现使用不同的编译器,其中的规则是不一样的,而且平时我们书写程序的时候也不会写这样复杂的代码,例如i+++i+++i++等,这样一方面在可读性方面很差,另一方面就是在移植性方面,不同的编译器就会出现不同的结果,所以这样写是不理想的。

#include <stdio.h>

/**
 * 自增/自减运算的应用
 * @brief main
 * @return
 */
int main(void)
{
    int a = 5,b,c,i = 10;//变量定义及初始化

    //将a赋值给b,然后自增1
    b = a++; //b = 5,a = 6
    //b先自增1,然后赋值给c
    c = ++b; //b = 6,c = 6

    printf("a = %d,b = %d,c = %d\n",a,b,c);  //a=6,b=6,c=6

    /**
     * C函数参数的入栈顺序是从右向左的
     * 主要是为了支持参数可变长度
     * 则下面的输出为12,11,10
     */
    printf("i,i++,i++ = %d,%d,%d\n",i,i++,i++); /**输出i,i++,i++**/

    printf("%d\n",++i); //i自增1,然后输出i 13 i=13
    printf("%d\n",--i); //i自减1,然后输出i 12 i=12
    printf("%d\n",i++); //先输出i,然后i自增1 12 i=13
    printf("%d\n",i--); //先输出i,然后i自减1 13 i=12
    printf("%d\n",-i++); //i先取负,然后输出i,最后i自增1 -12 i=13
    printf("%d\n",-i--); //i先取负,然后输出i,最后i自减1 -13 i=12

    /**
     * 有关于自增/自减问题的总结
     */
    /*************************************/
    /*  1:表达式中,一般情况下,是从左向右   */
    /*     函数参数中,运算方向是从右向左    */
    /************************************/

    /*************************************/
    /*  2:后缀,先取值,再自增             */
    /************************************/
    //例子
    int m = 5,n;
    n = m+++m+++m++;  //相当于a=(m++) + (m++) + (m++);
    //但由于是后缀,则先取值运算之后,在进行自增
    //所以 n = m + m + m; m++; m++; m++;
    //所以最后结果 n=15,m=8
    printf("n = %d,m = %d",n,m);

    /*************************************/
    /*     3:前缀,前两个自增后取值         */
    /*     后面的每个自增后都取值           */
    /************************************/
    //例子
    int p,j=5;
    p = ++j + (++j) + (++j);
    //则根据规则,前两个自增之后再取值
    //则变化之后 j=7 p = 7 + 7 + (++j);
    //两个之后的所有前缀每一个都先自增接着取值
    //则 j = 8, p = 7 + 7 +8;
    // p = 22, j = 8
    printf("p = %d,j = %d",p,j);

    /*************************************/
    /*  4:前缀,后缀混合情况               */
    /************************************/
    //学到这里我发现这个编译器不同,最后的结果也是不一样的,所以感觉很没有意义

    return 0;
}

目录
相关文章
|
1月前
|
C语言
初识C语言:自增与自减陷阱
初识C语言:自增与自减陷阱
|
6月前
|
C语言
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
48 0
|
C语言
C语言运算符——自增与自减
自增与自减 一个整数类型的变量自身加 1 可以这样写: a = a + 1;或者a += 1;不过,C语言还支持另外一种更加简洁的写法,就是:a++;或者++a;这种写法叫做自加或自增,意思很明确,就是每次自身加 1。 相应的,也有a–和--a,它们叫做自减,表示自身减 1。++和–分别称为自增运算符和自减运算符,它们在循环结构中使用很频繁。
212 0
|
JavaScript 前端开发
|
Java
java学习第三天笔记-运算符08-自增和自减运算符50
java学习第三天笔记-运算符08-自增和自减运算符50
58 0
java学习第三天笔记-运算符08-自增和自减运算符50
|
Java
java学习第三天笔记-运算符09-自增和自减运算符51
java学习第三天笔记-运算符09-自增和自减运算符51
65 0
java学习第三天笔记-运算符09-自增和自减运算符51
|
存储 Java
JavaSE面试题——自增运算(局部变量表 + 操作数栈)
JavaSE面试题——自增运算(局部变量表 + 操作数栈)
JavaSE面试题——自增运算(局部变量表 + 操作数栈)
|
存储 Java
关于自增操作,你真的懂了吗?
最近看见一道有意思的面试题,是关于自增操作的,让我回想起以前自己也遇到过,并且曾经也让我困惑过,今天拿出来跟大家分享,希望对大家有帮助。
207 0
关于自增操作,你真的懂了吗?
|
C语言
C语言入门——自增,自减运算(逐行逐句分析)
C语言入门——自增,自减运算(逐行逐句分析)
314 0
C语言入门——自增,自减运算(逐行逐句分析)