-1

所以我有一个指向双精度数组的指针,我需要做的是我们指针算术移动到数组中的下一个位置,但是我找不到任何关于如何做到这一点的像样的文档。

这是我当前的行请记住,温度数组是一个指针数组,看起来像这样double *temperaturesArray = new double[daysToPrompt];

cout << setw(10)<< counter + 1 << setw(10) << temperaturesArray + counter << "\370C" <<setw(10) << getFahrenheit(temperaturesArray + counter) <<"\370F"<< endl;
4

3 回答 3

2

您不需要编写任何指针算术。只需使用[]运算符索引数组即可。

cout << setw(10)<< counter + 1
     << setw(10) << temperaturesArray[ counter ] << "\370C"
     <<setw(10) << getFahrenheit(temperaturesArray[ counter ]) <<"\370F"
     << endl;

这将进入一个循环,也包括在某个点++ counter

std::vector这就是最常用的数组(以及类似的结构,如)。

编辑:如果在某个时候你的老师给出了使用“指针算术”的任意要求,你有两个选择:

  • 请注意,temperaturesArray[ counter ]直接转换为,*( temperaturesArray + counter)因此您已经在使用指针算术,只是没有以明确的方式。你也可以counter[ temperaturesArray ]向老师展示这一点。

  • ++ temperaturesArray代替++ counter和使用temperaturesArray[0]*temperaturesArray代替temperaturesArray[counter]。不过,这是不好的编程习惯。为你的懒惰老师感到羞耻,因为你没有告诉你该做什么,或者为什么,这样做也是一个坏主意。

于 2013-03-27T02:13:56.827 回答
1

正确的数组元素temperaturesArray + counter与您的代码中的一样。不幸的是,这只是一个指针。您需要取消引用指针以进行打印或每当您想要双精度而不是指针时:

cout << setw(10) << counter + 1 << setw(10) << *(temperaturesArray + counter) << "\370C" << setw(10) << getFahrenheit(*(temperaturesArray + counter)) << "\370F" << endl;

虽然这是违反直觉的。当您通过此分配时,只需索引数组;-)。

cout << setw(10) << counter + 1 << setw(10) << temperaturesArray[counter] << "\370C" << setw(10) << getFahrenheit(temperaturesArray[counter]) << "\370F" << endl;

在任何体面的 C++ 书籍中查找指针取消引用。它应该在那里。

于 2013-03-27T02:24:01.173 回答
0

我很遗憾地被要求使用指针算术

然后任何表达式,例如

temperaturesArray[ counter ]

可以替换为

*(temperaturesArray + counter )

对于数组,它们在功能上是相同的。

于 2013-03-27T03:28:59.880 回答