对于c++中声明一个对象需要申请存储空间即可使用new关键字。但是只能适用于指针类型,比如
class People { public: int id; }; //单一变量 int *i=new int(); delete i; //一维数组 int *i=new int[20]; delete []i; People *p=new People();
当我们定义一个指针的时候,指针是指向一个地址的,但是我们刚开始没有给他初始化,它只是一个空指针,无法调用该指针变量的内部成员等等。
#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; }
运行结果:
适用于指针对象,为内部分配空间,以用内部成员。
声明的只要是指针类型就可以。普通变量无法使用
#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; }