浅聊栈的概念以及计算机底层运算逻辑

本文通过实例解析栈的概念,强调局部变量与全局变量的存储位置,并探讨自增运算的执行顺序。指出自增运算符的右向左计算特性以及在多个运算符并存时的计算规则。同时,通过具体的代码示例分析了自增运算在不同情况下的结果,帮助读者深入理解这一概念。
摘要由CSDN通过智能技术生成

    栈的概念我很早就接触过了,那时是我在某视频网站上跟着老师自学,老师讲的非常不错,不过我不是很理解,只是知道了为什么一些数据在运算还没完成时就已经被释放了,昨天我的老师也讲了一点点关于栈的概念。栈(Stack)是储存数据的地方,堆也是一样(但堆(Heap)我还不是很了解),不过两者是有很大区别的,我主要讲一下自己对栈的理解(如果有错欢迎大家雅正):

    进入栈的数据类型最常见的就是局部变量,至于全局变量和static类型都是被存放在静态区的。数据存入栈被称为进栈,压栈或入栈,而且数据进栈讲究一个先进后出原则,意思是数据如果第一个进去,那只能最后一个出来。

    可以把他看成是单行道的死胡同,数据单进单出,最先进去的只能最后退出来。这和我们日常生活中的排队比较相似,不同的就是排队是先进先出。

    举个例子:
    int a=0;
    int v=(a++)+(++a);
    printf(“v=%d”,v);

    这题我第一次是怎么算的,第一个a++是先参与计算后再自增1,所以用于计算的数值是0,第二个是先自增1再参与计算,所以用于计算的数值为1,最终结果便是0+1=1。结果不出所料的错了。

    在听过老师讲解后我总结为三个错误,第一个是个常识,a++的自增运算发生在“;”之后;第二个是运算顺序,整个式子应该是先执行后面的++a,也就是a先自增成1,然后再执行a++,那么问题又来了,就算是先算++a再算a++那不也是0+1嘛?这就是第三个问题所在,参与运算的a++和++a,这两个a是同一个,当第二个a值变为1时,第一个a也会变成1,所以最终结果v=1+1=2。

    可以看的,我们熟悉的加法是自左往右进行计算的,但自增是自右往左进行计算的。

    另外再说一题
    int a=0;
    int v=(a++)+(a++)+(++a);
    printf(“v=%d”,v);

    在改变了上面的错误之后我对这类题已是信心满满,按上面的步骤进行计算,先算     ++a,所有a值变为1,再算两个a++,最终结果v=1+1+1=3。
    然而,不出意外我又又又错了,以上理解没问题,但有个要注意的点是,两个数据之间会先进行计算,根据加法运算是自左向右,所以前两个a++先结束加法计算,结果为0+0=0,而a自增成1
 

总结:
    后++(先参与计算再自增)发生在“;”之后,如果是两个以上的变量相加,则自增发生在每两个变量进行运算之后。
    ++(自增)运算是自右往左计算
    同一变量的作用域一样时,某一个变量值的改变都会使其他变量一起改变。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值