2011-04-11 74 views
1

我試圖創建結構的陣列,但是可以定義它的大小後,像這樣:創建一個結構數組,但稍後定義大小?

struct xy{ 

int x; 
int y; 
}; 

int main(){ 
    xy pos; 
    int size = 10; 
    pos = new xy[size]; 
    pos[0].x = 5; 
} 

但我無法得到它的工作,無論我試試。另外我不想用這個矢量,所以請不要說我應該。

+5

「我不想爲此使用矢量。」既然你問這不是建議,我不會建議它,但我會問:_why_你不想使用'std :: vector'? – 2011-04-11 22:23:21

+0

在'C'中,你可以'malloc'(或者C99中的可變長度數組)和'free'。 – pmg 2011-04-11 22:30:03

+0

對於全局變量,你甚至可以沒有動態內存:'extern xy pos []; int const size = 10; xy pos [size];' – 2011-04-11 22:32:08

回答

12

new返回一個指針:

int main(){ 
    xy* pos; 
    int size = 10; 
    pos = new xy[size]; 
    pos[0].x = 5; 
} 
+1

不需要其他字詞:-) – pajton 2011-04-11 22:24:49

+1

邁克爾的代碼工作原理與你的不同之處在於新運算符返回指向分配內存第一個元素的指針。由於xy是一個結構類型,因此pos必須是xy *或指向結構體的指針。這樣,如果您調用pos ++,編譯器將知道要跳過多少個字節才能使pos指向數組中的下一個結構。 – 2011-04-11 22:26:13

+4

@pajton:實際上,我應該添加單詞「但是你應該使用一個矢量」。我需要磨練我的智慧。 – 2011-04-11 22:27:54

1
xy* pos = new xy[size]; 

固定它。

相關問題