1、malloc介绍:
2、代码实例
#include <stdio.h>
#include <malloc.h> // 不能省 malloc 是menory allocate 的缩写
int main(void)
{
int i=5; //分配了4个字节 静态分配
int * p = (int *)malloc(4);// 分配个4个字节空间
/*
1.要使用malloc函数,必须添加malloc.h这个头文件
2.malloc 函数只有一个形参,并且形参是整型
3. 4表示请求系统为本程序分配4个字节
4.malloc 函数只能返回第一个字节的地址
5.12行分配了8个字节 ,p变量静态内存占4个字节,p指向的动态内存占4个字节。
6.p本身所占内存为静态分配的,p指向的内存是动态分配
*/
*p=5; //*p代表的就是一个int变量,只不过*p这个类型分配方式和11行内存分配方式不同
//int t=sizeof(*p);
free(p); // free(p)表示吧p所指向的内存给释放掉
//printf("HELLO\n"); //p本身所占内存为静态分配的,不能手动释放,只能在p变量所在的函数运行结束后才会被释放
printf("%d\n",*p);//指针变量p地址里存储的已经被释放了,打印的为垃圾值
// printf("%d\n",t); //输出t=4;
return 0;
}
结果:
1991120
--------------------------------
Process exited after 0.6203 seconds with return value 0
请按任意键继续. . .
3、
#include <stdio.h>
#include <malloc.h>//动态变量
void f(int *q)
{
//*p=200;//error
//q=200;
*q=200;
//**q=200;//error ,*q代表整型变量不能 在前面加*
//free(q);将q释放后将无法输出*q的值,系统会产生一个垃圾值
}
int main(void)
{
int t=sizeof(int); //sizeof(int)返回值是int 所占的字节数
int *p = (int *)malloc(t);
//指针变量p表示系统分配内存单元的地址
*p=10; //*p=10;表示见整型值10装进个这个地址,故该地址的值为10,即*p是值为10;
printf("%d\n",*p);//10
f(p);
printf("%d\n",*p);//200
return 0;
}
结果:
10
200
--------------------------------
Process exited after 0.4514 seconds with return value 0
请按任意键继续. . .
4、延伸:
5、form :传智播客