1.动态内存分配是什么?
所谓动态内存分配(Dynamic Memory Allocation)就是指
在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。
动态内存分配不象
数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,
且分配的大小就是程序要求的大小。
2.malloc分配内存空间的作用:
malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小。
malloc(sizeof(size))//
内存动态存储区中分配一块长度为size字节的连续区域
(int*)malloc(sizeof(size));把返回值转换成对应数据类型的地址。指针类型,(这样,这个指针就可以把数据存储在区域中)
malloc(sizeof(数据类型\或者数字))
例子:
#include<stdio.h>
#include<malloc.h>
int main(){
int *i;
i=(int*) malloc(sizeof(int)); //在内存中找一个合适大小的内存, 然后返回内存的首地址 ,地址给这个指针。
*i=20; //这个指针指向地址了, 就可以使用空间保存数据
printf("%d\n",(*i));
printf("%p",i); //随机分配内存,所以每执行一次程序,地址就变化了。
return 0;
}
效果图:
地址:00C021C8
地址:00AB21C8(每执行一次,分配空间一次,地址变化)
3.malloc分配给结构体:
p2=(struct student*)malloc(sizeof(struct student)); //写法注意。 结构体类型
scanf("%d", &p2->name);
printf("%d", p2->name);//这个就可以输出数据,就是这样写的
#include<stdio.h>
#include<malloc.h>
struct student{
int name;
int num;
char c[20];
};
int main(){
int *i;
i=(int*) malloc(sizeof(int)); //在内存中找一个合适大小的内存, 然后返回内存的首地址 ,地址给这个指针。
*i=20; //这个指针指向地址了, 就可以使用空间保存数据
printf("%d\n",(*i));
printf("%p\n",i); //随机分配内存,所以每执行一次程序,地址就变化了。
struct student *p2; //创建结构体指针变量,p2不指向结构体变量首地址,所以要分配内存空间,给他
p2=(struct student*)malloc(sizeof(struct student));
scanf("%d", &p2->name);
printf("%d", p2->name);
return 0;
}