关于c/c++的数组移动与自增结合遇到的问题

希望实现对数组的前挪,写了以下代码

#include <stdio.h>

int main(int argc, char *argv[])
{
    int arr[] = {0, 1, 2, 3, 4, 5};
    int len = sizeof(arr) / sizeof(arr[0]);
    int i = 0;
    while (i < len - 1)
    {
        arr[i] = arr[++i];
    }

    for (i = 0; i < len; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;

期望得到的结果是
[1,2,3,4,5,5]

代码运行结果
在这里插入图片描述
可是结果依然是[0,1,2,3,4,5]
我又用c++测试了一次,均不能实现我的想法
在这里插入图片描述
发现如此使用才可以
在这里插入图片描述
这就让人不得不思考,这两种方式差别在哪里了,
  从最后这段代码可以知道,顺序应该是确定a[i],然后让i自增,所以在取下个a[i]时取到了自增后的i。
  从上一段代码模仿第一段代码的思路,应当是先取左值a[i],再取自增后的i对应的a[i],但这思路与现实大相径庭。
  通过查看地址发现
在这里插入图片描述
它确实是移动了,我猜应该要同一条语句才会出现问题,所以再测试了一下同一条语句
在这里插入图片描述
居然还是没有问题,再变回数组呢?
在这里插入图片描述
好像出现问题了两个输出的都是2,这是我第一次遇到这种坑,目前还没理解什么原因,但是这个坑要记录一下提醒自己。

找到了问题的成因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值