本文共 1081 字,大约阅读时间需要 3 分钟。
创建文件“静态内存分配.c”
#include<stdio.h>
#include<stdlib.h>
/**
静态内存分配
在主函数中定义一个指针,指针传递给子函数,子函数给赋值
*/
func(int** pAddress){
int i = 110;
*pAddress = &i;
}
main()
{
int* p;
func(&p);
printf("*p=%d\n",*p);
system("pause");
}
运行结果如图:
画图分析内存分配情况:
修改代码执行
main()
{
int* p;
func(&p);
printf("*p=%d\n",*p);
printf("*p=%d\n",*p);
printf("*p=%d\n",*p);
printf("*p=%d\n",*p);
printf("*p=%d\n",*p);
system("pause");
}
运行结果如图:
特点:静态内存是系统是程序编译执行后系统自动分配,由系统自动释放,静态内存是栈分配的;
malloc(memory allocate) 函数
free(地址); 回收内存
realloc re- allocate
创建文件“动态内存.c”
#include<stdio.h>
#include<stdlib.h>
/**
动态内存分配
*/
func(int** pAddress){
int i = 110;
int* temp;
//动态的申请一块内存空间
temp =malloc(sizeof(int)); //返回的是在堆内存中的一块地址
//把申请出来的内存赋值为i;
*temp = i;
//把堆内存中的一块地址赋值给 一级指针变量 pAddress
*pAddress = temp;
}
main()
{
int* p;
func(&p);
printf("*p=%d\n",*p);
system("pause");
}
运行结果:
画图分析:
打印多次:
main()
{
int* p;
func(&p);
printf("*p=%d\n",*p);
printf("*p=%d\n",*p);
printf("*p=%d\n",*p);
printf("*p=%d\n",*p);
system("pause");
}
运行结果如图:
方法执行完后被回收,但是是自己申请的空间,没有回收需要自己回收:
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。