2014-11-04 52 views
0

我想使用變量創建特定大小的數組,但據稱唯一的方法是使用指針。如何取消引用數組元素(C++)

int size = 5; 
string* myArray = new string[size]; 

我現在想分配一個元素從這個數組到另一個變量,我相信只能通過解引用來工作。下面的代碼行不起作用。我如何解決它?

string line; 

myArray[0] = "Hello"; 
line = *myArray[0]; 

編輯:

我只是想澄清一些:如果在正常的 「myArray的[0]」 代碼也不起作用。它編譯,但導致崩潰。以下是關於我想要做什麼的一些更具體的代碼。

void MyClass::setLine(string line) 
{ 
    myLine = line; /*This is a private variable in MyClass*/ 
} 

/////////////// 

MyClass* elements = new MyClass[size]; 

elements[0].setLine(myArray[0]); 

我想給數組元素分配從類私有變量,但是當我嘗試值分配給私有變量的程序崩潰。

+1

'line = myArray [0];'我強烈建議你使用'vector myArray(size);'而不是因爲它會刪除自己的內存。 – 2014-11-04 17:27:32

+0

...或者如果你有一個固定大小,改用'std :: array '。 – 2014-11-04 17:29:43

+2

你可能會說「給出編譯錯誤」並粘貼錯誤信息而不是說「不起作用」。對於這個簡單的問題,這並不重要,但它通常是一種有用的做法。 – anatolyg 2014-11-04 17:30:04

回答

3

如果你知道在編譯時的大小,你可以使用正常的數組。如果您只知道運行時的大小,您仍然可以使用std::vector,這比手動分配更容易使用。

無論如何,如果您確實想了解陣列管理的指針,請記住索引運算符相當於加法和取消引用,即ar[i]*(ar + i)相同。換句話說,索引只是在偏移處解引用。

因此,不需要額外的解除引用。只需將星號放在失敗的行中即可。

2

有效的代碼看起來像

string line; 

myArray[0] = "Hello"; 
line = myArray[0]; 

通過,你可以使用std::vector類而不是數組,如果您要添加或刪除集合元素的方式。

例如

std::vector<std::string> myArray; 
myArrray.reserve(5); 

myArray.push_back("Hello"); 

line = myArray[0];