使用double数组时的指针运算

时间:2013-03-27 02:08:39

标签: c++ pointers pointer-arithmetic

所以我有一个指向双数组的指针,我需要做的是使用指针算法移动到数组中的下一个位置,但是我找不到任何关于如何执行此操作的文档。

这是我目前的行,请记住,温度数组是一个类似于double *temperaturesArray = new double[daysToPrompt];的指针数组

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

3 个答案:

答案 0 :(得分: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]。不过,这是糟糕的编程习惯。对你懒惰的老师感到羞耻,因为他没有告诉你做什么,或者为什么这样做也是一个坏主意。

答案 1 :(得分: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 ++书籍中查找指针解除引用。它应该在那里。

答案 2 :(得分:0)

  

我需要遗憾地使用指针算法

然后是任何表达,例如

temperaturesArray[ counter ]

可以替换为

*(temperaturesArray + counter )

对于数组,这些在功能上是相同的。