2016-12-08 150 views
0
struct Books { 
    char title[50]; 
}; 

int main() { 

    struct Books Book1;  
    struct Books Book2;  

    strcpy(Book1.title, "C Programming"); 

    strcpy(Book2.title, "Telecom Billing"); 

    printf("Book 2 title : %s\n", Book2.title); 

    printf("Book 1 title : %s\n", Book1.title); 
    } 

在這裏,一切都得到了正確執行,但我想問'struct'是如何分配內存'book2'沒有使用任何內存分配函數或任何指針?結構內存分配的方式

+1

就像它分配爲book1的。你爲什麼特意要求book2? –

+2

編譯器在某處爲您分配內存。除非你想知道編譯器如何在內部工作,否則沒有什麼可說的。 –

+1

和'int int2;'一樣。 – dasblinkenlight

回答

3

Book1Book2都是自動變量。它們在聲明後會自動分配,並在超出範圍時自動釋放。一旦函數返回,你必須非常小心,不要返回任何指針。

在大多數當代體系結構中,它們將駐留在堆棧上(除非編譯器將它們放入寄存器中)。分配本身非常便宜,因爲它只涉及遞增堆棧指針。

+0

啊!我懂了。謝謝!所以,這裏只有堆棧內存分配作爲一個自動變量發揮作用。在學習關於鏈表數據結構時,被'struct'中的動態內存分配概念所困惑。 – somu

0

Books結構分配,每一本書被實例化時間(即當聲明在main功能Book1Book2)的可用於存儲標題50個字符(50個字節)的陣列。

要得到的東西是如何工作的感覺,嘗試同樣的程序有以下書籍定義

struct Books { 
    char * title 
}