关于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;
} 

猜你喜欢

转载自blog.csdn.net/m0_48554728/article/details/120569048