2016-03-23 103 views
-1

我真的需要該特別,因爲我使用痛飲,並需要進行強制轉換函數定義相匹配。鑄造SOMETYPE **到SOMETYPE * [],反之亦然

函數定義接受

SomeType const * const variable_name[] 

此外,另一個問題將是─ 如何分配內存以

SomeType * variable[] = <??? using new or malloc > 

x條目?

編輯:

我已經搜索了很多,但我一直跌進後其分配內存以SomeType**使用新SomeType*[x]

SomeType** variable = new SomeType*[x]; 

能否請你告訴我一個辦法做到這一點?

回答

1

功能希望的指針陣列。

聲明:

SomeType * variable[]; 

無效語法。

你將需要:

SomeType * * variable; 

聲明一個指針的SomeType的指針。

您需要分兩步進行內存分配。
首先,分配指針數組:

variable = new SomeType * [/* some quantity */]; 

記住,上面的語句只分配室的指針。內存內容仍未初始化。

其次,分配指針的對象。

for (unsigned int i = 0; i < some_quantity; ++i) 
{ 
    variable[i] = new SomeType; 
} 

刪除時,該陣列之前刪除數組的內容:

for (unsigned int i = 0; i < some_quantity; ++i) 
{ 
    delete variable[i]; 
} 
delete[] variable; 
+0

第一行的編譯錯誤 - 「變量」的存儲大小未知 – rents

+0

@rents,感謝您的評論。我解決了這個問題。 –

0

函數定義接受

SomeType const * const variable_name[] 

我C中沒有專家++,但是如果函數參數中的數組聲明與C中的聲明相同,那麼這是以下內容的同義詞類型:

SomeType const * const * variable_name 

即,在一個功能參數陣列是一個真正的指針。你的書應該儘早解釋這一點。


我已經搜索了很多,但我一直跌進後其分配內存以SOMETYPE **使用新SOMETYPE * [X]即

SomeType** variable = new SomeType*[x]; 

能否請你告訴我一個如何做到這一點?

你確實可以使用類似的代碼分配SomeType const * const *,所以你已經回答了你自己的問題。我想你也可以使用一個std::vector<SomeType const * const>像這樣:

std::vector<SomeType const * const> *foo = new std::vector<SomeType const * const>(); 
/* XXX: Add some items to the vector */ 
SomeType const * const *bar = &foo[0]; 

,如果你不知道應該有多少個項目foo含有這將是有用的,你希望它增長。


我不明白爲什麼人們不再讀書了。這是最快和最便宜的(如果你考慮工時的成本)從一個有信譽的人物正確學習。