一 new运算符
1. int *p=new int [10]; (new运算符返回第一个元素的地址,该地址被赋给指针p )
1. 在运行阶段为一个int 值分配一个未命名的内存,并使用指针来访问这个值。
2, new将找到一个长度正确的内存块,并返回该内存的地址。
3, int *pn=new int; ( new int 告诉程序,需要适合储存int 的内存,new运算符根据类型来确定需要多少字节的内存。然后它找到这样的内存,返回其地址。接下来将地址赋给pn,pn是被声明为指向int的指针。现在pn是地址,*pn是储存那里的值。)
4,使用delete时,后面要加上指向内存块的指针。这些内存块最初使用new分配的。
5, int *ps =new int ;
.......
delete ps; (这将释放ps指向的内存,但不会删除ps指针ps本身。所以可以将ps重新指向另一个新分配的内存块。)
6,不要尝试释放已经释放的内存块,不能使用delete来释放声明变量所获得的内存。
例如:int *ps =new int ;
delete ps;
delete ps; //not ok
int jugs =5;
int *pi =&jugs;
delete pi; //not alloowed
【注意】只能是用delete 来释放使用 new 分配的内存,然而,对空指针使用delete是安全的。
二 使用 new 来创建动态数组
静态联编: 如果通过声明来创建数组,则在程序被编译时将它分配内存空间。不管程序最终是否使用数组,都占用内存,在编译时给数组分配内存被称为 静态联编。
动态联编: 使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在运行的时候选择数组的长度。
1. int *p=new int [10]; (new运算符返回第一个元素的地址,该地址被赋给指针p )
2 . 当程序使用完new分配的内存块时,应使用delete释放他们。
delete [] p; // 方括号告诉程序,应释放整个数组,而不是指针指向的元素。
3. 【注意】 不要使用delete来释放不是new分配的内存。
不要用delete释放同一内存块两次。
如果用
new []为数组分配内存,则应使用
delete[]来释放
对空指针使用delete是安全的。
//4. 举例:
#include<iostream>
int main()
{
using namespace std;
int *p=new int [3];
p[0]=4;
p [1]=3;
p [2]=8;
cout <<p[1]<<"\n";
p+=1;
cout<<p[1];
p-=1;
delete [] p;
return 0;
}