2011-04-28 173 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