你真的理解i++和++i吗

各种版本的教材上都写了i++和++i的用法 但你真的理解了吗?

++i 先将i加1 再返回i

i++ 先返回i的值的一份拷贝 然后再将i加1 这个表达式的值是i原来的值的一份拷贝

示例:1

#include
void main(){
int test1=0,test2=0;
int i=100;
test1=i++;
test2=++i;
printf("test1的值为:%d",test1);
printf("test2的值为:%d",test2); 
}

输出:test1的值为:100
          test2的值为:102

分析:i++先返回i的一份拷贝然后i自增1,即test1的值为i的拷贝值为100 然后i值自增1 i的值变为101

          继续执行下一句++i,先将i加1,i变为102,然后返回i,所以test2的值为102

以上内容有c语言基础的基本都了解。

示例2:

#include
void main(){
    int test=10;
    int i=100;
    ++i=test;
    printf("i的值为:%d\n",i);
    printf("test的值为%d\n",test);
 }

你会不会觉得这样的写法根本就是错误的?没关系,楼主我原来也这么认为(谁叫我是小菜呢 哈哈哈)

分析一下:前面说过 ++i是先将自加1 然后返回i 说明++i是即可以是左值 也可以是右值

++i=test 相当于给i变为101后返回i 又重新将test的值赋给i 即i此时的值为10,test值没有变化

输出:i的值为:10
          test的值为10

实例3:

可能有人会问了 既然++i=test 是正确的写法 那 i++=test是不是一样可以呢?

别急吗 我们来分析一下 上面说过 i++ 是返回i的值的一份拷贝 后i自加1  所以这条语句相当于 将 100=test=10  明显错误


 
  

你可能感兴趣的:(C/C++,i++和++i,c语言基础)