库函数:
malloc库函数 作用:内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址。
eg:malloc(123);//开辟123个字节的临时分配域, 返回值是第一个字节的地址 若失败 返回 空(NULL或者0)。
需要定义一个指针定义指向动态内存分配的地址。
eg int *p=malloc(sizeof(int)); //用指针指向一个分配4字节的动态内存地址
free库函数
声明:void free(void *p)无返回值
其作用是释放指针 p 所指向的动态空间的地址。p 是调用 malloc 函数时的返回的地址。free函数无返回值。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main ()
{
int *p=0;
p=malloc(sizeof(int)); //申请内存 包含在<stdlib.h>中 当系统内存被耗尽时 会失败
printf("%p\n",p); //打印出地址
*p=123; //存放值是123
printf("%d\n",*p); //打印出p的值
free(p); //使用完后释放
}
运行结果:
0x19c3010
123
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct st_girl //女朋友结构体
{
char name[50]; //定义姓名
int age; //定义年龄
};
int main (int argc,char *argv[])
{
int *pi=malloc(sizeof(int)); //分配int类型大小的内存
long *pl=malloc(sizeof(long)); //分配long类型大小的内存
double *pd=malloc(sizeof(double)); //分配double类型大小的内存
char *pc=malloc(sizeof(101)); //分配101字节的内存,可存放100个字符的字符串
//分配struct st_girl结构体大小的内存
struct st_girl *pst=malloc(sizeof(struct st_girl));
//像普通指针和变量一样使用动态分配的内存
*pi=10; printf("*pi=%d\n",*pi);
*pl=20; printf("*pl=%d\n",*pl);
*pd=10.5; printf("*pd=%.lf\n",*pd);
strcpy(pc,"西施"); printf("*pc=%s\n",pc); //赋值
strcpy(pst->name,"王昭君");pst->age=21; // 用指针直接找到结构体中的变量
printf("name=%s,age=%d\n",pst->name,pst->age);
//及时释放动态分配的内存
free(pi);free(pl);free(pd);free(pc);free(pst);
}
*pi=10
*pl=20
*pd=10
*pc=西施
name=王昭君,age=21
使用动态分配内存技术的时候,分配出来的内存必须及时释放,否则会引起系统内存耗尽
指针变量在创建时一定要初始化 否则会乱指
int *p=0;
或者 int ii; int *p=&ii
使用free函数释放掉指针内存时 一定要把指针指向0
int*p=0;
free(p); //
p=0;
总结:有分配就有释放 c++中的容器代替了c中的链表。并且比链表好用。