2011-04-28 121 views
2

1.內存分配

void main(void) 
{ 
    int *ptr1; 
    ptr1 = (int *)malloc(..); 
} 

2.

void main(void) 
{ 
    static int *ptr2; 
    ptr2 = (int *)malloc(..); 
} 

我想問的是如何分配的內存PTR1 & PTR2做了什麼?

+1

在C中,不需要指定'malloc'的返回值。另外,'void main(void)'應該至少是'int main(void)'。 – 2011-04-28 07:19:02

回答

9

ptr1指針本身被分配在堆棧上。 ptr1指向堆上的內存。

ptr2指針本身是在程序啓動時分配的(在調用main之前)並且是全局的,但僅在main中才可見,因爲它在其範圍內聲明。 ptr2也指向堆上的內存。

main之外聲明ptr2只會使其在下面的所有函數中都可見,但其存儲將是相同的。

+0

即使我使ptr2全球將它與現在具有相同的效果 – Aragorn 2011-04-28 07:15:05

+0

如果你在'main'之外聲明'int * ptr2;',它將是相同的,除了'ptr2'將在所有其他函數中可見在它下面,不只是「主」。 – 2011-04-28 07:16:57

+0

好的非常感謝您的幫助! – Aragorn 2011-04-28 07:44:15