1. 程式人生 > >C和C++的區別(二)

C和C++的區別(二)

1、引用

引用就是個別名,記憶體單元的別名,底層以指標的方式來支援引用,在引用使用的地方,系統自帶解引用的過程。

int a = 10;
int &b = a;

a和b是同一個記憶體塊

引用的注意事項:

  1. 引用一定要初始化
  2. 引用引用的變數要能取地址
  3. 引用是不可改變的
  4. 引用只能訪問引用變數所以用的記憶體塊的內容

2、new、delete和malloc、free

new和malloc的區別

  1. malloc只能在堆上開闢,new在自主存取區域開闢
  2. malloc是函式,new是關鍵字
  3. malloc只能開闢記憶體,new可以開闢並初始化
  4. 記憶體不足時,malloc返回空,new丟擲異常
  5. malloc不能開闢常量記憶體塊,new可以開闢
int *p1 = (int*)malloc(sizeof(int)*10);//c語言動態開闢陣列
free(p1);

int *p2 = new int[10];   //c++動態開闢陣列,10為陣列長度
delete[]p2;

int *p3 = new int(10);   //c++開闢的同時並且初始化

int *p4 = new int[10]();  //c++開闢陣列並進行零初始化
delete[]p4;

const int *p5 = new const int(10);       //c++中開闢常量記憶體塊
delete p5;

const int *p6 = new const int[10]();    //c++開闢常量記憶體陣列,但是此操作毫無意義

//c++中動態開闢二維陣列
int **p8 = new int*[10];
for(int i = 0;i < 10;i++)
{
    p8[i] = new int[10];
}
for(int i = 0; i < 10; i++)
{
delete[]p8[i];
}
delete[]p8;

//重定位new
int a;
char *p = new(&a)char('a');