複製鏈接
請複製以下鏈接發送給好友

引用變量

鎖定
引用變量來源於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變量可以通過變量名訪問。在指令式語言中,引用變量通常是可變的;但在純函數式語言中,變量可能是不可變的。
中文名
引用變量
使用説明
起標識作用的運算地址
使用原則
數據對象小、按值傳遞
定    義
最多用處就是作為函數的參數

引用變量定義

intrate=80;
int&pt=rate;
⒈pt 是引用變量,申明引用變量時必須將其初始化.pt 和rate 的值指向相同的內存變量. 引用的最多用處就是作為函數的參數(結構和對象).通過引用變量作參數可以使函數使用原始數據.而不是拷貝.
⒉引用的特點更接近於const 指針,一旦與某個變量關聯起來就將一直效忠於它,可以通過初始化來設置引用,但是不能通過賦值來設置
intother=30;
pt=other;
此時,rate的值和 pt的值都改為了30 但是地址還是原來rate的地址.而不是other的地址.
⒊如果程序不想改變傳遞給它的信息,但是又想使用引用,那麼則應該使用常量引用
inttest(constint&p)//當改變
p值是,編譯器將生成錯去消息
⒋如果實參和應用參數不匹配,c++將為此產生臨時變量,這個只有在參數為const 引用時才允許這麼做,在下列情況下生成臨時變量,並且函數參數將引用該變量.
****當參數不是const引用時,如果不是左值(又無法生成臨時變量)將導致編譯錯誤*****(強調了第三點,即儘量用const)
.實參的類型正確,但是不是左值
.實參類型不正確,但是可以轉化為正確類型
左值概念:除了字面常量和包含多項式的表達式可以被引用的數據對象
⒌儘量將函數返回的引用聲明為const,避免你通過返回的引用而修改它的值.返回引用其實是返回被引用變量的別名
constsysop&use(sysop&pref)
sysoppref={};
sysoptest=use(pref);
相當於
user(pref);
test=pref;
⒍繼承的特徵就是基類的引用可以指向派生類對象,而無需強制類型轉化.這種好處是可以定義一個接受基類引用座位參數的函數,調用函數是既可以將基類對象作為參數,也可以將派生類作為參數
如果
int&ir=0
表示的是地址為0,而不是引用的意思,聲明中有變量賦值的情況,必須把變量作為引用的對象,要不然系統無法識別你的語句是引用還是賦值!

引用變量使用説明

如果int &ir=0,表示的是地址為0,而不是引用的意思,聲明中有變量賦值的情況,必須把變量作為引用的對象,要不然系統無法識別你的語句是引用還是賦值!
⑴&;在此不是求地址運算,而是起標識作用。
⑵類型標識符是指目標變量的類型。
⑶聲明引用時,必須同時對其進行初始化
⑷引用聲明完畢後,相當於目標變量名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變量名的別名。
ra=1; 等價於 a=1;
⑸聲明一個引用,不是新定義了一個變量,它只表示該引用名是目標變量名的一個別名,它本身不是一種數據類型,因此引用本身不佔存儲單元,系統也不給引用分配存儲單元。故:對引用求地址,就是對目標變量求地址。&ra與&a相等。
⑹ 可以建立數組的引用,C++中解決數組做形參的降價問題就是通過使用數組的引用
⑺不能建立引用的引用,不能建立指向引用的指針。因為引用不是一種數據類型,所以沒有引用的引用,沒有引用的指針
例如:
int n;
int &&r=n;//錯誤,編譯系統把"int &"看成一體,把"&r"看成一體,即建立了引用的引用,引用的對象應當是某種數據類型的變量
int &*p=n;//錯誤,編譯系統把"int &"看成一體,把" *p "看成一體,即建立了指向引用的指針,指針只能指向某種數據類型的變量
⑻值得一提的是,可以建立指針的引用
例如:
int *p;
int *&q=p;//正確,編譯系統把" int * "看成一體,把"&q"看成一體,即建立指針p的引用,亦即給指針p起別名q。

引用變量使用原則

對於按值傳遞而不修改的函數時:
.數據對象小,按值傳遞
.數據對象是數組,則定義const 的指針
.如果數據對象為較大的結構,則可以使用const 指針或者cosnt 引用,
.如果是類對象,則使用const 引用.
對於修改值的函數
.如果是內置數據,則使用指針
.數組,也只能使用指針
.結構 使用指針或者引用
.對象.使用引用