目錄
引用不是新定義乙個變數,而是給已存在變數取了乙個別名,語法理解上程式不會為引用變數開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間
比如:李逵,在家稱為"鐵牛",江湖上人稱"黑旋風"
型別& 引用變數名(物件名) = 引用實體
int main()
注意int main()
void testconstref()
小結1.我能否滿足你變成別名的條件:可以不變或者縮小你讀寫的許可權 (const int -> const int 或 int -> const int),而不能放大你讀寫的許可權 (const int -> int)
2.別名的意義可以改變,並不是每個別名都跟原名有一樣的許可權
3.不能給型別不同的變數起別名的真正原因不是型別不同,而是隱式型別轉換後具有常性了
常引用的意義 (舉例棧)
typedef struct stack
st;void initstack(st& s)//傳引用是為了形參的改變影響實參
void printstack(const st& s)//1.傳引用是為了減少拷貝 2. 同時保護實參不會被修改
void test(const int& n)//即可以接收變數,也可以接收常量
int main()
小結1.函式傳參如果想減少拷貝使用引用傳參,如果函式中不改變這個引數最好使用 const 引用傳參
2.const 引用的好處是保護實參,避免被誤改,且它可以傳普通物件也可以傳 const 物件
void swap1(int* p1, int* p2)
void swap2(int& rx, int& ry)
int main()
在 c++ 中形參變數的改變,要影響實參,可以用指標或者引用解決
意義:指標實現單鏈表尾插 || 引用實現單鏈表尾插
指標引用
void slistpushback(sltnode*& phead, int x)
void testslist2()
有些書上喜歡這樣寫 (不推薦)
typedef int sltdatatype;
typedef struct slistnode
sltnode, *psltnode;
void slistpushback(psltnode& phead, int x)
2.1、傳值返回
//傳值返回
int add(int a, int b)
int main()
int main()
int main()
int main()
#include #includeusing namespace std;struct a ;a a;void testfunc1(a a) {}void testfunc2(a& a) {}a testfunc3() a& testfunc4() void testrefandvalue()void testreturnbyreforvalue()int main()#include
#include
using namespace std;
struct a ;
a a;
void testfunc1(a a) {}
void testfunc2(a& a) {}
a testfunc3()
a& testfunc4()
void testrefandvalue()
void testreturnbyreforvalue()
int main()
以值作為引數或者返回值型別,在傳參和返回期間,函式不會直接傳遞實參或者將變數本身直接返回,而是傳遞實參或者返回變www.cppcns.com量的乙份臨時的拷貝,因此用值作為引數或者返回值型別,效率是非常低下的,尤其是當引數或者返回值型別非常大時,效率就更低
引用就是乙個別名,沒有獨立空間,和其引用實體共用同一塊空間
指標變數是開闢一塊空間,儲存變數的位址
int main()
這裡我們對比一下 vs 下引用和指標的彙編**可以看出來他倆是同根同源
引用和指標的不同點:
1、引用在定義時必須初始化,指標沒有要求
2、引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實體
3 、沒有 null 引用,但有 null 指標
4、在 sizeof 中含義不同:引用結果為引用型別的大小,與型別有關;但指標始終是位址空間所佔位元組個數 (32 位平台下佔 4 個位元組,64 位平台下佔 8 個位元組),與型別無關
5、引用自加即引用的實體增加 1,與型別無關,指標自加即指標向後偏移乙個型別的大小,與型別有關
6、有多級指標,但是沒有多級引用
7、訪問實體方式不同,指標需要解引用,引用編譯器自己處理
8、引用比指標使用起來相對更安全,指標容易出現野指標、空指標等非法訪問問題
本文標題: 帶你了解c++初階之引用
本文位址:
詳解C語言初階之陣列
目錄 所謂陣列 array 就是具有相同資料型別的集合,存放的資料型別即陣列本身的型別。可以發現儲存的都是int型 補充 除錯小技巧 除錯視窗 按f5進行除錯,開啟選單欄中的除錯 視窗 監視 隨便開啟乙個監視視窗,輸入arr,將程式執行過arr的初始化即可觀察到arr內部進行的初始化 a 完全初始化...
具體解釋C 引用 帶你走進引用的世界
一 介紹引用 首先說引用是什麼,大家能夠記住,引用就是乙個別名,比方小王有個綽號叫小狗。他的媽媽喊小狗回家吃飯。那就是在喊小王回家吃飯。接下來我們用兩行 來宣告乙個引用 就拿小王和小狗來說吧 int xiaow int xiaog xiaow 上面就是乙個引用,說明幾點要注意的地方 1.不是取位址符...
C語言初階之陣列詳細介紹
目錄 include int main int i 0 int sz sizeof arr sizeof arr 0 int n 0 scanf d n for i 0 i sz 1 i if n arr i 找到插入位置 break for int j sz 1 j i j arr j arr j...