首页 > 代码库 > C++动态内存的分配与释放 引用

C++动态内存的分配与释放 引用

new 运算符

1、指针变量 = new 数据类型, 如:int *p; p=new int;

2、new从内存中卫程序分配一块内存空间,并返回指向该内存的首地址,该地址存放于指针变量中

new 

先分配内存,做复杂类型的构造

delete 

释放


delete运算符

delete 指针变量; 如:delete p;

(1)用new获取内存空间,必须用delete进行释放

(2)对一个指针只能调用一次delete

(3)用delete运算符作用的对象必须是用new分配的内存间的首地址

注:C语言中有free()函数分配内存

new a;

delete []a;

#include <iostream>
using namespace std;
void main()
{
    int *p;
    p = new int;
    *p = 5;
    cout << *p;
    delete p;
}
可以在用new分配内存的同时进行初始化。使用形式为:

指针变量 = new 数据类型(初始值)

例如上面提到的

p = new int;

*p = 5;

也可以写成

p = new int(5);


用new建立数据类型的变量

指针变量 = new 数据类型[数组大小];

如:int *p = new int[5];

此时指针变量指向第一个数组元素的地址。使用new分配数组时,不能提供初始值。


作用域运算符:

通常情况下,如果全局变量与局部变量同名,那么局部变量在其作用域内具有较高的优先权


C语言规定只能在变量作用域内使用该变量,不能使用其他作用域的变量。而C++中提供了作用域运算符::,他能指定所需要的作用域。


注意:

不能用::访问函数中的局部变量

在C++语言中作用域运算符::还可以限定类的成员。

#include <iostream>
using namespace std;
float a=2.4;            //全局变量
void main()
{
    int a = 8;          //局部变量
    cout<<a<<endl;
    cout<<::a<<endl;        //::
    
}

引用

在C++语言中引用用于在程序的不同部分使用两个以上的变量名指向同一地址,不占用内存空间,引用申明的时候必须初始化,一旦初始化之后不能再对他赋另外的值,而指针不同第一个,指针是有空间的,第二个指针申明的时候可以不初始化然后指针一旦被赋值之后,还可以在赋值的。

#include <iostream>
using namespace std;
void main()
{
    int num = 50;
    int &ref = num;
    ref += 10;
    cout<<"num"<<num<<endl;
    cout<<"ref"<<ref<<endl;
    num += 40;
    cout<<"num"<<num<<endl;
    cout<<"ref"<<ref<<end;    
}




C++动态内存的分配与释放 引用