动态分配内存
内存的申请和释放使用两个函数来实现: malloc/free。
malloc申请内存
#include<stdlib.h>
int main()
{
int* p = (int*)malloc(100 * 4);// 申请100*4字节
for(int i = 0;i <100;i++){
p[i] = i * i; // 使用这块内存
}
return 0;
}
需要注意的是,要申请空间的大小以字节为单位,应用程序自己负责计算一共需要多少字节。比如要存储100个int,那么所需空间的大小应该是400字节,可以用malloc(100*4)或者malloc(100*sizeof(int))来指定大小。
Malloc的返回值指向了这块申请到的内存,应用程序需要把它强制转为指定的数据类型。这块内存和数组没有本质区别,用法完全相同。
free释放内存
#include<stdlib.h> void free(void*ptr);
实例:用Citizen表示一个市民,用Car表示一辆车。一个市民起初没有车,但未来可能有一辆车。
#include<stdlib.h>
#include<string.h>
struct Car{
char maker[32]; // 制造商
int price; // 价格
};
struct Citizen{
char name[32]; // 名字
int deposite; // 存款
Car* car; // NULL时表示没车
};
// 定义一个对象:开始没车。
Citizen shaofa = {"liyanyan",100,NULL};
// 后来,他可能买了一辆车。
void buy(Citizen* owner){
// 创建一个对象
Car* car = (Car*)malloc(sizeof(Car));
strcpy(car->maker,"BMW");
car->price = 10;
// 保存此对象(确切地说是记住了指针)
owner->car = car; // 车有了
owner->deposite -= car->price; //钱没了
}
// 终有一天,这车会报废。
void discard(Citizen* owner,Citizen* other){
Car* car = owner->car;
car->price *= 0.5; // 半价出售
other->car = car; // 别人拥有了这辆车
owner->deposite += car->price;
// 不能free(car); //不能 free 这车在别人手里
owner->car = NULL; // 回到无车状态
}
来源:https://www.cnblogs.com/QLEO/p/12286027.html