- 在C中:用malloc函数分配空间,free函数释放空间
- 在C++中:用new函数分配空间,delete函数释放空间
在C语言中我们这样子使用
int *data; data = (int*)malloc(sizeof(int)*3);// 分配三个int大小空间 free data;C++
而在C++里增加了new关键字,让我们更加方便
new的函数原型为void* operator new (std::size_t size)
使用例子如下:
int *m = new int;//分配一个int大小空间 delete m; int *n = new int(3);//分配一个int大小空间并且初始化 delete n; int *o = new int[3];//分配三个int大小空间 delete[] o;//这里要用delete[]释放空间否则会内存泄漏数据结构里的例子
那么在数据结构中我们就能常见到new的用法:
typedef struct {
ElemType *data;
int MaxSize, length;
} SqList;
// C
L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
// 等价的C++
L.data = new ElemType[InitSize];
typedef用法
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode, *LinkList;
// 等价于
struct LNode{
ElemType data;
struct LNode *next;
}
typedef struct LNode LNode;
typedef struct LNode *LinkList;
// 用法,以下两种写法等价,只是为了可读性更强
// 声明一个指向单链表的第一个结点的指针
LNode *L;
LinkList L;
再来看一个例子:
struct student{
int num;
char name[20];
char sex;
};
struct student s1 = {1001,"myname",'M'};
struct student stArr[3] = {1001,"myname",'M',1002,"myname",'F',1007,"myname",'M'};
struct student *p;// 定义结构体指针
上述语句中我们定义了一个结构体,其类型为“struct student”,注意不能省去struct,它们是一体的。但每次使用这个结构体都要写 struct student 很麻烦。
因此我们可以利用typedef来简化一下:
typedef struct student{
...
}stu,*pstu,StuList[Snum];
// 等价于
struct student{
...
}
typedef struct student stu;
typedef struct student *pstu; // 定义结构体指针类型
typedef struct student StuList[5]; // 定义学生数组



