c语言指针在什么情况下需要malloc,什么时候可以不这样,(被这个问题搞晕了)
展开全部
C语言的内存模型包含有栈和堆两部分。
栈存放的是函数执行时的变量等,这部分变量由系统自动管理,比如 int a;等,这些变量在函数体结束时自动收回。
堆存放的是由用户自己手动管理的变量,这些变量是的由malloc函数建立,由 free函数释放。不会在函数体结束时自动收回。
追问
那什么时候必须用malloc呢?
int *p = NULL
int *p = (int*)malloc(sizeof(int))
我知道第一个是个空指针,第二个指向分配给它的内存的地址,但什么时候必须这样做呢?
追答
比如你想要随意分配内存空间,自己来管理和释放;或者你想要在函数执行结束时,所分配的变量还在,那就用malloc;
比如:
int * create()
{
int *p = (int*)malloc(sizeof(int));//此时在堆中建立了存放int的空间。
*p=2;
returen p;
}
int main()
{
int *a = create();//此时执行完后 刚刚在函数体内用malloc分配的空间还在,还存着2。
printf("%d",*a);//输出2
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询