C++ 数组自增相关问题

2022-10-06 10:57:04 +08:00
 Machard

部分程序如下:

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 没有数据?

1366 次点击
所在节点    问与答
10 条回复
liuguangxuan
2022-10-06 10:59:28 +08:00
两个 double 指针你没有分配内存。
wevsty
2022-10-06 11:04:13 +08:00
i=1 的时候 dumypT[i] 实质上是 dumypT+2 而不是你所认为的 dumypT+1.

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/884852

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX