【发布时间】:2012-10-28 21:50:00
【问题描述】:
我的主要问题是:
有没有更好(或更有效)的方法来使用指针声明多维数组?我的所作所为是否走在正确的轨道上?
编程练习:
你卖了C++ for Fools这本书。使用二维数组存储 3 年月销售额的输入(以书籍数量而非金钱数量计算)。报告合并年份的总销售额。程序应该使用循环来按月份提示您,使用字符串对象数组,初始化为月份字符串并将输入数据存储在二维数组中。然后,程序应该找到数组内容的总和,并报告 3 年的总销售额。
这是我的代码的SNIPPET:
/* Global constants */
const unsigned int YRS = 3;
const unsigned int MNTHS = 12;
/* Create 2D-Array */
int** bookSalesArrayPtr = new int*[YRS]; // Pointer-to-Array-of-Pointers
for (unsigned int i = 0; i < YRS; ++i) // Each element of bookSalesArrayPtr
bookSalesArrayPtr[i] = new int[MNTHS]; // In each element create new array[12]
这里是我完整源代码的链接:http://ideone.com/LcQeuj
【问题讨论】:
-
我知道我可以使用在任何函数(全局)之外声明的二维数组,并且不需要指针。除了全局声明方式,以及我在代码中这样做的方式:还有哪些其他方式?我正在学习结构化编程入门课程(不是完整的 OOP 课程)。初学者编程。
-
您可以将数组声明为全局的,并且可以消除指针。但这些事情彼此无关,你可以两者都做,或者一个都做,或者一个都不做。您选择的方式是使用指针的典型方式。我想到的唯一另一种方法是将您的第二维分配为 YRS*MNTHS 整数的分配,而不是 MNTHS 整数的 YRS 分配。
-
@john:你的意思是创建一个大块,而不是一个官方的二维数组?我这样做了,它奏效了,但我的教授特别想要一个二维数组,所以我不得不找到一个不同的解决方案。谢谢你,约翰。
-
这就是我的想法(抱歉没有格式化)。
int** bookSalesArrayPtr = new int*[YRS]; int* largeBlock = new int[YRS*MNTHS]; for (unsigned int i = 0; i < YRS; ++i) bookSalesArrayPtr[i] = &largeBlock[i*MNTHS];和你的版本在结构上是一样的,但是可以说是优化的,因为它只进行了两次分配
标签: c++ pointers multidimensional-array