2012-10-28 124 views
1

我的主要問題是:C++ for循環,多維數組和指針運動

有沒有更好的(或更有效)的方法來聲明使用指針多維數組?我在正確的軌道上完成了我所做的事情嗎?

編程練習:

你賣的書C++傻瓜。使用一個二維數組來存儲三年的月銷售額(以書籍數量而非金錢數量計)。報告合併年份的總銷售額。程序應該使用循環來按月提示你,使用一組字符串對象,初始化爲月份字符串並將輸入數據存儲在二維數組中。然後,程序應該查找數組內容的總和並報告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

+0

據我所知,我可以使用任何函數(全局)之外聲明的二維數組,並消除指針的需要。除了全局聲明的方式外,還有我在代碼中的做法:還有其他方法嗎?我參加了結構化編程課程簡介(不是全面的OOP課程)。初學者編程。 – nodebase

+0

您可以將數組聲明爲全局數組,並且可以消除這些指針。但是這些東西沒有任何關係,你們可以同時做,也可以不做。你選擇的方式是使用指針的典型方式。對我而言,唯一的另一種方式是將第二維分配爲YRS * MNTHS整數的一種分配,而不是YRS分配的MNTHS整數。 – john

+0

@john:你的意思是創建一個大塊,而不是官方的二維數組?我這樣做,它的工作,但我的教授特別想要一個二維數組,所以我不得不找到一個不同的解決方案。謝謝你,約翰。 – nodebase

回答

-1

任何解決方案應該是儘可能簡單。如果不需要指針,則避免使用指針,因爲它們會使程序變得複雜:

int bookSales[YRS][MNTHS]; 

注意這是多麼容易閱讀。請注意,沒有管理分配,銷燬或任何其他簿記的代碼。即使這樣的結構增加了執行時間(這在這裏是極其不可能的),但考慮一下這樣節省了多少時間(開發人員,維護人員,調試人員,文檔)。電腦時間便宜。人類時間是有價值的。

在對解決方案進行評級時,忽視人力成本是很常見的。

+3

-1蹩腳的C風格陣列。 – Puppy

+1

+1,只是因爲。沒有一件事,沒有一件事,這種風格是錯誤的。首先,它使內存緊湊,這在開始使用複雜矩陣算法時非常重要。另一方面,它避免了內存指針,避免了內存分配。 –

+2

這種風格有一切錯誤。使用'std :: array'(就像C風格的數組一樣「緊湊」)。在C++中沒有理由使用C風格的數組。另請參閱http://codepuppy.co.uk/cpptuts/CClass/CArrays.aspx。 – 2012-10-28 22:40:36