一、陣列的引用
切入:可以將乙個變數定義成陣列的引用(這個變數和陣列的型別要相同)
形式:
int odd[5] = ;
int (&arr)[5] = odd; //中括號內的數一定要和所引用的陣列的維度一樣
cout << arr[3] << endl; //等價於odd[3]
解讀:注意上面**中的形式,因為arr引用了陣列odd,故arr變成了陣列的別名。
二、陣列的引用——作為形參
難點:對應形參/實參的寫法、怎麼運用該形參
寫法:
#include #include #include #include #include #include using namespace std;
void print(int (&arr)[5])
int main()
; print(odd);
return 0;
}
運用:把該形參名視為所繫結的陣列的名字使用即可。
優點:節省記憶體消耗,不用拷貝乙份陣列,直接使用原陣列(甚至可以修改原陣列)。
助記:我們不妨以string物件的引用來輔助記憶,因為string就像是乙個字元陣列,只是它沒有確定的容量。
#include #include #include #include #include #include using namespace std;
//void print(int (&arr)[5])
void print(string &arr) //相比陣列,只是少了乙個[維度]
int main()
; string ss = "hello world";
// print(odd);
print(ss);
return 0;
}
三、陣列的引用——作為返回型別
難點:對應返回型別的寫法、怎麼使用該返回的引用
知識:因為陣列不能被拷貝,所以函式不能返回陣列,但可以返回陣列的引用(和陣列的指標)
可先學習一下返回陣列的指標,再來看返回陣列的引用
返回陣列的引用的寫法可以說和返回陣列的指標是一模一樣
寫法:
/* 題目:編寫乙個函式的宣告,使其返回包含10個string物件的陣列的引用 */
//不用型別別名
string (&func(形參))[10];
//型別別名
using arrs = string[10];
arrs& func(形參);
//尾置返回型別
auto func(形參) -> string(&)[10];
//decltype關鍵字
string ss[10];
decltype(ss) &func(形參);
運用:返回乙個陣列的引用怎麼用??
#include #include #include #include #include #include using namespace std;
int odd = ;
int even = ;
//int (&func(int i))[5]
//auto func(int i) -> int(&)[5]
decltype(odd) &func(int i)
int main()
助記:既然返回的陣列的引用,而它又只是乙個名字(不帶維度),我們把它視為所引用的陣列(在該函式內返回的那個陣列)的別名即可。
補充:返回的是陣列的引用,那麼函式裡也應該返回的是陣列!
助記:
int &func(int a, int b)
//函式呼叫結束後,返回b的引用,返回引用的優點在於不用拷貝乙個值返回
int main()
指標的引用作形參
include stdafx.h include iostream using namespace std typedef struct pos pos void func pos p 指標的引用 int tmain int argc,tchar argv pos p cin p.x p.y pos...
C 中一般引用作形參和常引用作形參的問題
常數沒有位址,對於常數的引用必須是個const 同樣的,如果x是個const的話,int g int a 也會報錯 結論 如果不需改變形參的值又不用作引數傳遞 實參賦值給形參 用常引用作形參適應面最廣 實參可以是變數也可以是常量。如果需要改變形參的值,用引用作形參最合適 實參必須是變數不允許是常量。...
常指標 常引用作為形參和返回值
include using namespace std const int n 10 intsum1 const int p return sum void sum2 const int p,int s 常量指標,普通指標,無返回 const int sum3 const int p,int s 指...