C和C++的區別(二)
阿新 • • 發佈:2018-12-06
1、引用
引用就是個別名,記憶體單元的別名,底層以指標的方式來支援引用,在引用使用的地方,系統自帶解引用的過程。
int a = 10;
int &b = a;
a和b是同一個記憶體塊
引用的注意事項:
- 引用一定要初始化
- 引用引用的變數要能取地址
- 引用是不可改變的
- 引用只能訪問引用變數所以用的記憶體塊的內容
2、new、delete和malloc、free
new和malloc的區別
- malloc只能在堆上開闢,new在自主存取區域開闢
- malloc是函式,new是關鍵字
- malloc只能開闢記憶體,new可以開闢並初始化
- 記憶體不足時,malloc返回空,new丟擲異常
- 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');