关于c++中的动态存储 new关键字
1.基本含义
对于c++中声明一个对象需要申请存储空间即可使用new关键字。但是只能适用于指针类型,比如
class People
{
public:
int id;
};
//单一变量
int *i=new int();
delete i;
//一维数组
int *i=new int[20];
delete []i;
People *p=new People();
2.为什么要用new分配空间
当我们定义一个指针的时候,指针是指向一个地址的,但是我们刚开始没有给他初始化,它只是一个空指针,无法调用该指针变量的内部成员等等。
#include<iostream>
#include<stdlib.h>
using namespace std;
struct People{
int num;
};
int main()
{
People p;//编译正常,直接声明变量,可以调用
People *q;//这样生声明一个指针类型,但是没有分配内存,所以里面的num成员无法使用
q->num=24;
cout<<q->num<<endl;//上面说无法使用num成员但是不会编译错误可以运行,但是运行结果错误
return 0;
}
运行结果:
所以下面的代码进行分配空间,可以使用内部成员
int main()
{
People p;//编译正常,直接声明变量,可以调用
People *q=new People();
q->num=24;
cout<<q->num<<endl;
return 0;
}
运行结果:
3.适用对象
适用于指针对象,为内部分配空间,以用内部成员。
声明的只要是指针类型就可以。普通变量无法使用
4.结构体指针别用用法
#include<iostream>
using namespace std;
typedef struct node{
int num;
}Data,*Node; //*Node名字含义就是声明指针变量,等于 Node *p;
int main()
{
Node p=new Node();//这句话是错误的,Node是别名,但不是直接的结构体,刚开始我就一直这样写...
//发现一直错,最后瞎弄才知道问题所在.....
//正确代码:
Node p=new node();//此时要用原来的名字
p->num=15;
cout<<p<<endl;
Node q=p;
q->num=12;
cout<<p->num;
return 0;
}