V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Machard
V2EX  ›  问与答

C++ 数组自增相关问题

  •  
  •   Machard · 2022-10-06 10:57:04 +08:00 · 1536 次点击
    这是一个创建于 763 天前的主题,其中的信息可能已经有所发展或是发生改变。

    部分程序如下:

    std::ifstream ifs;
    
    ifs.open(fname.c_str());
    
    double *dumypT;
    double *dumyAmplitude;
    
    for (int i=0; i< 10; ++i)
    {
        ifs >> *dumypT >> *dumyAmplitude;
    
        std::cout << i << " " << dumypT[i] << " " << dumyAmplitude[i] << std::endl;
    
        dumypT++; dumyAmplitude++;
    }
    

    遇到的问题:为什么数组 dumypT[0]和 dumyAmplitude[0]有数据,而 i>=1 没有数据?

    第 1 条附言  ·  2022-10-06 12:11:49 +08:00

    为了避免其他问题,我现在将一部分程序改成了如下:

    std::ifstream ifs;
    
    ifs.open(fname.c_str());
    
    double *dumypT        = new double [pts];
    double *dumyAmplitude = new double [pts];
    
    for (int ipt=0; ipt<pts; ++i)
    {
        ifs >> *dumypT >> *dumyAmplitude;   // --- 怎样才能自增的读入数据元素?
    
        std::cout >> ipt >> " " >> dumypT[ipt] >> " " >> dumyAmplitude[ipt] >> std::endl;
    
        dumypT++; dumyAmplitude++;
    }
    

    现在遇到的问题,每次循环读入数据元素都是从0开始,我想要的效果是,读入的数组随着指标ipt而变化。

    10 条回复    2022-10-06 15:20:32 +08:00
    liuguangxuan
        1
    liuguangxuan  
       2022-10-06 10:59:28 +08:00 via Android
    两个 double 指针你没有分配内存。
    wevsty
        2
    wevsty  
       2022-10-06 11:04:13 +08:00
    i=1 的时候 dumypT[i] 实质上是 dumypT+2 而不是你所认为的 dumypT+1.

    (虽然这么说其实不太准确,不过凑合理解吧)
    LotusChuan
        3
    LotusChuan  
       2022-10-06 11:12:25 +08:00 via iPhone
    你的数组头和下标每次往后偏移一个单位,读入元素是存放在数组头,但是输出元素是在数组头+下标,所以仅在下标 i 为 0 的时候输入输出在同一个位置。此外正如#1 说的,你数组内存没分配,就算改正了偏移问题也是 undefined 。
    Machard
        4
    Machard  
    OP
       2022-10-06 11:17:00 +08:00
    @LotusChuan @liuguangxuan 谢谢你的回复,数组的内存已经分配了。正如你提到的读入元素每次都是从 0 开始,如果把输出部分改为 dumypT[0],这样能把数据完整的输出。现在的问题是:在读入元素的时候如何能 自增的读入?
    ysc3839
        5
    ysc3839  
       2022-10-06 11:22:57 +08:00 via Android
    读取部分直接写 dumypT[0]不就好了?为什么一定要改写指针变量的值?
    leonshaw
        6
    leonshaw  
       2022-10-06 11:31:01 +08:00
    首先想清楚两个指针是作为数组还是迭代器
    ysc3839
        7
    ysc3839  
       2022-10-06 11:40:09 +08:00 via Android
    另外建议说一下具体的情况,读取的数据量是固定的吗?
    如果是的话直接声明定长数组即可,比如 double dumypT[10];
    Machard
        8
    Machard  
    OP
       2022-10-06 12:32:15 +08:00
    @ysc3839
    @leonshaw 从文件读取数据到数组 dumypT 和 dumyAmplitude ,正如程序中所示,dumypT++貌似不能控制 ifs >> dumypT 数组的指标。在读取数据的时候,ifs >> dumypT ,每次都是 dumypT[0]有数据,
    misdake
        9
    misdake  
       2022-10-06 15:17:27 +08:00
    dumypT 已经指向了下一个元素,就不需要再加 i 了

    ifs >> dumypT[i] >> dumyAmplitude[i];
    std::cout >> i >> " " >> dumypT[i] >> " " >> dumyAmplitude[i] >> std::endl;
    不修改指针

    或者

    ifs >> *dumypT >> *dumyAmplitude;
    std::cout >> i >> " " >> *dumypT >> " " >> *dumyAmplitude >> std::endl;
    dumypT++; dumyAmplitude++;
    Lqxc
        10
    Lqxc  
       2022-10-06 15:20:32 +08:00 via Android
    因为你的指针也在自增
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   993 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 20:48 · PVG 04:48 · LAX 12:48 · JFK 15:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.