2013-10-26 26 views
6

做一個結構,並給它三個成員這樣,我是在技術面試,並要求做出這樣一個結構..

struct student{ 
       int rollno; 
       char name[10]; 
       int arr[]; 
       }stud1, stud2; 

現在給4條痕stud1和5個記錄標記爲stud2。 我告訴面試官,我們必須給數組一些大小,否則它不會被分配任何空間,否則會導致編譯器錯誤。他說根據C的新標準,這是可能的。 最後我無法理解如何去做。有沒有人有建議? 我試圖做一個realloc,但我不知道如果它可以工作。

+1

我喜歡分享。這個問題是有道理的,並且與您的體驗相關聯。這樣的問題肯定會受到求職者的讚賞:) – Rerito

回答

8

樣本本身是錯誤的,因爲自動對象(stud1和stud2)不能聲明。但你可以寫

struct student *s = malloc(sizeof *s + number_of_arr_elems * sizeof s->arr[0]); 
+0

但是,需要給這樣的空間是什麼,我的意思是結構內的指針也可以用於這個目的.. – mrigendra

+1

你將不得不管理第二動態內存區域。例如。現在,你完成了'免費(s)';一個指針需要額外的'free(s-> arr)'。性能可能是另一個原因,因爲你需要在堆上分配兩個而不是一個對象。 – ensc

3

這是一個靈活陣列成員。該功能已添加到C99中。它允許結構類型的最後一個成員具有不完整的數組類型。 C99標準中的6.7.2.1對此功能進行了說明。

「作爲一個特殊情況,具有多於一個名爲構件的結構的最後一個元件可以具有一個不完整的陣列型;這就是所謂的柔性陣列構件[...]」

該段的其餘部分描述了它的用法。