C++遠征_離港篇

離港篇

引用

引用是變量的別名

引用不能單獨存在

基本數據類型的引用:

int x = 2;
int &b = x;
b = 10;
cout << x << endl; // 10

結構體類型的引用

typedef struct{
    int x;
    int y;
}Coor;

Coor c1;
Coor &c = c1;
c.x = 10;
c.y = 20;
cout << c1.x << c1.y; // 10 20

指針類型的引用

類型 *&指針引用名 = 指針;

int a = 10;
int *p = &a;
int *&q = p;
*q = 20;
cout << a << endl;
// 20

引用作函數參數

void fun(int &a,int &b)
{
    int c = 0;
    c = a;
    a = b;
    b = c;
}

int x = 10,y = 20;
fun(x,y);

const

int x = 3; //變量

變量名 存儲地址 存儲內容
x &x 3

const int x = 3; // 常量

const 與 指針類型

const int *p = NULL;
int const *p = NULL;
// 上兩者完全等價
int * const p = NULL;  // 此形式不同

// const 還可以加兩次:
const int * const p = NULL;
int const * const p = NULL;
// 上兩者完全等價
int x = 3;
const int *p = &x;
p = &y; // 正確
*p = 4; // 錯誤

因爲 const 修飾 *p,所以 *p 不可變

特殊記憶法:

一個比較好記的方法來區分 int const p與 int const p,把*讀作pointer to然後從後往前讀。

第一個int const *p就可以讀作 p is a pointer to const int,p是指向常量的指針

第二個int* const p就可以讀作 p is a const pointer to int,p是指向int型的常指針

int const * p 指 p 的指向可以變,但是 p 的指向的那個值的內容不能變

int * const p 指 p 的指向不可以變,但是 p 的指向的那個值的內容可變

const 與 引用

int x = 3;
const int &y = x;
x = 10; // 正確
y = 20; // 錯誤

C++ 函數新特性

函數參數默認值

void fun(int i,int j=5,int k=10);

// 在定義時不建議加上默認值,在聲明時加
void fun(int i,int j,int k) {
    cout << i << j << k;
}

有默認值的參數必須在參數表的最右端

函數重載

在相同作用域內,名稱相同參數可辨

​ 用同一函數名定義的多個函數,

參數個數參數類型不同。

int getMax(int x,int y,int z)
{
    // to do
}

double getMax(double x,double y)
{
	// to do
}

如何實現重載?如上兩個函數在編譯後會變成

getMax_int_int_intgetMax_double_double來區分兩個同名函數

內聯函數

編譯時將函數體代碼和實參代替函數調用語句,執行效率高

內聯函數關鍵字:inline

inline int getMax(int i,int j,int k);

內聯編譯是建議性的,由編譯器決定

邏輯簡單(甚至不能還有 循環),調用頻繁的函數建議使用內聯

遞歸函數無法使用內聯方式

C++內存管理

內存的本質:資源

操作系統掌控內存資源

我們只能 申請/歸還 內存資源

申請/歸還 內存資源就是內存管理

運算符:

  • 申請內存 new
  • 釋放內存 delete

內存的申請和釋放

申請內存:

int *p = new int;

釋放內存:

delete p;

塊內存的申請和釋放

int *arr = new int[10];

delete []arr;

內存操作注意事項

申請內存不一定能申請成功:

int *p = new int[1000];

if(NULL == p) {
    // 內存分配失敗
}

釋放內存注意事項:

delete p;delete[] p;
p = NULL;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章