你想要做什麼,是創建一個數組,像任何其他數組:
houset hose_array[25] = {
{1990 , 12180 , 5},
{1234 , 56789 , 0}
};//initialize here, if you want to
但是你必須改變你的show_house
功能,如數組衰變爲指針,當你通過他們功能(大部分時間)。也許改成這樣:
void show_houses(houset *houses, int len)
{
puts("\n\nID Income Members\n") ;
while(len)
{
printf ("%d %d %d \n",
passed_house->ID ,//indirection operators!
passed_house->Income ,
passed_house->Members);
passed_house++;//move pointer to next house
--len;
}
}
這將打印出所有的房屋,由len
指定。 see it in action
堆棧溢出:
你要知道,你可能會發現,像這樣的陣列可能會耗盡堆棧存儲器。在這種情況下,您會發現自己可以使用指向結構的指針數組或指針指針。如果你不熟悉C動態內存,我建議你上讀了,第一...
如果你知道它是如何工作的,或多或少:
houset *house[25];//an array of 25 pointers:
house[0] = malloc(sizeof(houset));
//we're dealing with a pointer, and need the indirection operator here, too
house[0]->ID = 1990;
//the alternative is less readable, IMO:
(*house[0]).Income = 12180;//deref pointer, then direct access is poissible
house[0]->Members = 5;
house[1] = malloc(sizeof(houset));
house[1]->ID = 1991;
house[1]->Income = 22180;
house[1]->Members = 3;
但是現在,我說:數組衰減成指針,所以我們必須再次改變我們的show_houses
函數。這是它變得有點棘手:
void show_houses(houset **houses, int len)
{//pointer to pointer!
puts("ID Income Members\n") ;
while(len)
{//dereference the first pointer
printf ("%d %d %d \n",
(*passed_house)->ID ,//second pointer, still requires indirection
(*passed_house)->Income ,
(*passed_house)->Members);
passed_house++;//shift pointer to pointer by 1
--len;
}
}
不要忘記free
的記憶,一旦你用它做:
free(house[0]);
free(house[1]);
避免MEM-泄漏。
再次,this codepad可以作爲一個工作示例
就像其他數組一樣:'houset arrOf [10];'聲明10個'houset'結構的數組... –
但是10應該是25,因爲他想要25條記錄:) – lordkain
到OP:請注意,接受的答案可能會導致您出現臭名昭着的問題,之後該站點被命名爲:[stack overflow](http://en.wikipedia.org/wiki/Stack_overflow)。程序越增長,堆棧溢出的可能性就越大。通讀我的答案,它解釋了一種方法來解決這個問題... –