用new来为指针分配内存

来源:互联网 发布:php 超链接传递变量 编辑:程序博客网 时间:2024/04/29 06:04

//用new来分配内存

#include<iostream>

using namespace std;

int main()
{
 int * pt=new int;//使用new来为指针pt分配一个未命名的内存空间
 *pt=1001;  //new int 告诉程序,需要适合存储适合int类型数据的内存。new操作符根据数据类型来确定需要多少字节内存来存储。
 
 cout<<"int  value = "<<*pt<<" : location = "<<pt<<endl;//输出指针指向的值和指向的内存地址

 double * pd=new double;
 *pd=100001.0;

 cout<<" double value = "<<*pd<<" : location ="<<pd<<endl;
 cout<<"size of *pt = "<<sizeof(*pt)<<endl;
 cout<<"size of *pd = "<<sizeof(*pd)<<endl;
 cout<<"size of pt ="<<sizeof(pt)<<endl;
 cout<<"size of pd = "<<sizeof(pd)<<endl;

 delete pt;//释放了指针所指向的内存块,但指针本身所在的内存地址不变,

 cout<<*pt<<endl;//由于pt指向的的内存块被删除,所以其上的数据也丢失。这里输出0

 pt=new int;//此处再次为指针指向分配一个新的内存地址,但没有为这个内存地址赋值

 cout<<*pt<<endl;//所以这里还是输出0;
 cout<<&*pt<<endl;

 *pt=123456;//这里再次为指针新指向的内存块写入一个值,
 cout<<*pt<<endl;//所以这里将输出12346;

 delete pt;//又一次的释放指针所指向的内存块。 此时它指向的值123465也跟着丢失。

 *pt=789;//这次不为它的指向创建一个内存地址,而是直接给它赋值
 cout<<*pt<<endl;//这里输出了正确的值789,
     //但我个人认为因为我没有为它的指向创建一个内存地址,我觉得指针会随便找一个地址来存789这个值,
     //因此它是不安全的,不知道这样对不对?
 cout<<&*pt<<endl;//此处输入指针指向的内存地址,但奇怪的是地址竟然和第一次创建的一样,难道它不是随便找一个地址来存?
 return 0;
}

原创粉丝点击