2016-02-01 73 views
-3

我使用的結構是:動態分配結構麻煩的數組

struct Employee { 
    char firstName[10]; 
    char lastName[10]; 
    char SSN[11]; 
    double wage; 
    int hours; 
    char workerStatus; 
}; 

當試圖創建一個數組,我可以做

Employee workers[11]; 

,它會創建一個包含數組11名員工

然而,當我嘗試

Employee* workers = new Employee[11]; 

它只會給我一個名爲workers的變量。 這究竟是爲什麼

+1

你得到完全相同稱爲'workers'在這兩種情況下一個變量,既可以用作陣列(實際上的「陣列」 2個不同的含義)11'Employee's的。你的問題到底是什麼? –

+1

你期望會發生什麼? –

+0

[這是Visual Studio中顯示,當我做僱員工人[11](https://gyazo.com/93090967909b04e24791ee3b46d7f4c2)。另一方面,當試圖動態分配它時,[this](https://gyazo.com/26b77a2e547c782d65c7f4681fefb7a8)就是它提供的。 – 000

回答

3

這究竟是爲什麼

因爲這是字面上你問你的計算機,以使發生。

實際上,在均爲的情況下,您有一個變量名爲workers

Employee* workers = new Employee[11]; 

在這裏,你問它創建一個變量workersEmployee*類型的指針,並使其指向11個Employee對象的動態分配的塊。

Employee workers[11]; 

在這裏,你問它來創建一個變量workersEmployee[11]類型的數組。

在這兩種情況下,底層數據由11 Employee組成,但在指針的情況下,Employee的數量不會被烘焙到該類型中。這就是爲什麼你的調試器不能一次自動向你顯示所有Employee:它不知道有多少!那隻能說明你的Employee目前正在所指向worker。但是,您可以安全地增加worker十次以查看其他Employee s。

我不知道爲什麼你所期望的代碼兩種完全不同的線路做同樣的事情。

+0

第一'workers'只點*一個*'Employee',但它在11 –

+0

@KerrekSB序列中的第一:看,這就是事情變得有點毛茸茸的。因爲根據類型系統,它(始終(有效))指向_one_「員工」,但根據代碼,它(當前)指向11個「僱員」塊,這是我在上面找到的......並根據內存分配器也是如此,這是'delete [] workers'的工作原理。所以真的有幾種方法來看待它。我認爲上述現在已經足夠清楚了。 –

+1

非常感謝您清理這個問題。指針對我來說還是新的。現在我知道要增加指針了,一切都在解決。 – 000