2015-08-03 42 views
-4

指針數組的大小是已知的。我如何分配內存到T* var[1]C++如何分配內存數組像T * var [1]

我想:

T* var[1]; 
var = new T*[count]; 
for(int i = 0; i < count; ++i) 
    var[i] = new T; 

但是編譯器指出: 「不能在T **轉換成T * [1]」

+0

你並不需要爲'var'分配內存。你只需要將它的唯一元素指向一個有效的'T'對象。 – juanchopanza

+5

爲什麼不使用'std :: vector'? – Jarod42

+0

我不能改變變量的類型..所以vector不是一個選項,變量應該是一個二維數組.. ..有n個指針指向T – roari

回答

2

假設var被宣佈爲T**,你的代碼works perfectly fine。我強烈建議你使用std::vector作爲:

std::vector<T> var(count); 

雖然。


顯然的聲明的格式爲:

T* var[1]; 

這是指針的靜態分配的陣列。你將不得不使用:

var[0] = new T; 

來填補它。

例如,你可以有:

constexpr int count = 3; 
T* var[count]; 
for (int i = 0; i < count; ++i) 
    var[i] = new T; 

Live demo

+0

我無法更改變量的類型..所以矢量不是一個選項 – roari

+0

@Christian請參閱編輯。 – Shoe

+0

但T *的指針存儲在哪裏?這隻適用於p [0],但不適用於指針數組。 – roari

0
T** var = new T*[count]; 
... 
delete[] var; 

當前類型(T *)[1]等於T **,但一個聰明的編譯器可能如果相應維度中有多個元素,則強加警告。

如果它是一個結構的成員,那麼只有一個指針數組,也許有些一維數組牛逼:

var[0][i] 
+0

我不能更改變量聲明... – roari

+1

@Christian我很好奇。爲什麼你不能改變變量的類型?因爲如果你不能那麼你有一個1元素的數組。你可能只需要使用單個指針('T * var = ...'),或者甚至更好'T var(...);'。 – Shoe

+0

該變量用於我無法更改的一段代碼..它是結構的成員..該變量是一個指針數組,其中每個指針都重定向到另一個類型爲T的指針。 例如T * p = var [0] [0]; – roari