关于i++和++i

关于i++和++i

因为要换系统,所以把之前的博客都传上来,年代久远所以写的有点…

i++

function()
{
    tmp = i;
    i = tmp + 1;
    return tmp;
}
  • 单独分配了内存

++i

function()
{
    i = i + 1;
    return i;
}
  • 和i共享了内存
看个例子
#include<stdio.h>
int main(int argc, char* argv[])
{
    int i = 3;
    printf("%d,%d,%d\n",i++,++i,i);
}

输出结果为:
在这里插入图片描述

  • 原因:

    1.printf的执行顺序是从右往左执行的

    2.i和++i都共享一个内存

    3.i++会为表达式单独分配内存

  • 执行的过程:

    1.先执行i=3;

    2.再执行++i,i=4;

    3.执行i++,先为表达式分配内存,表达式的值为4,然后i+1变为5,即i=5,那个内存为5

    4.最后输出的时候,i++这个表达式的值为4,而++i和i都用此时为i分配的内存的值,也就是5

关于i++和++i的线程安全

  • 如果i是局部变量,那么线程是安全的。因为局部变量是线程私有的,别的线程访问不到。
  • 如果i是全局变量,那么线程是不安全的。因为,同一进程中的不同线程都有可能访问到。
  • 如果由大量线程同时执行i++的操作,i变量的副本拷贝到每个线程的线程栈,当同时有两个线程栈以上的线程读取线程变量,假如此时是一的话,那么同时执行i++操作,在写到全局变量,最后两个线程执行完,i不会是2。

猜你喜欢

转载自blog.csdn.net/lalala323/article/details/89299217