帅哥小王 2021-06-29 22:41 采纳率: 100%
浏览 17
已采纳

C++中变量生命周期的问题

小弟正在自学C++,学到了指针数组,数组指针,生命周期等等。 自己突发奇想,写了段代码跑跑。发现了奇怪的现象。

代码如下

#include <iostream>
#include <typeinfo>
#include <type_traits>
using namespace std;

int main ()
{
   int a[3] = {1,2,3};
   int b[3] = {};
   for (int i = 0; i>=0 && i<=2; i++)
   {
       a[i] = a[i] + 1;
       //int b[i];
       b[i] = a[i];
       cout << a[i] <<endl;
       cout << b[i] <<endl;

   }
    cout << b[0] <<endl;
    cout << b[1] <<endl;
    cout << b[2] <<endl;
}

运行结果呢是 2 2 3 3 4 4 2 3 4

可是如果我把for循环里面int b[i]前面的注释去掉,结果如下 2 2 3 3 4 4 0 0 0

请问大大们,这是为啥?

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-06-30 04:33
    关注

    你用int b[i]的话,那b[i]这个整体就是一个变量名,不再是数组b的第i个元素了,因此它的变化就不会引起数组b的数据改变。 所以你前面输出一句,因为b[i]还是个变量,b[i] = a[i]会修改b[i]这个函数内部变量的值,但b[0]到b[2]的数组值是不会改变的,因此最后三个输出都是初始的0值。 代码中变量使用会优先使用最近定义的生命期内的变量

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集