1.什麼是「引用」?宣告和使用「引用」需要注意哪些問題?
引用就是某個目標變數的「別名」,對引用的操作與對變數的操作效果完全相同。宣告乙個引用需要對其進行初始化,這不是新定義了乙個變數,它只是表示該引用名是目標變數名的乙個別名,它本身不是一種資料型別,因此引用不佔儲存單元。
2.使用「引用」作為函式引數有哪些特點?
(1)傳遞效果與指標是一樣的。這時形參成為實參變數或物件的乙個別名來使用,對形參的操作就是對相應目標物件的操作。
(2)使用引用傳遞函式的引數,在記憶體中並沒有產生實參的副本,它是直接對實參進行操作。而是用一般變數傳遞函式的引數,當發生函式呼叫時,需要給形參分配儲存單元,傳遞的物件還要呼叫拷貝建構函式。因此,當引數傳遞的資料較大時,用引用比用一般變數傳遞引數的效率和所佔空間都好。
(3)與指標相比,引用更容易使用,更清晰。
3.將「引用」作為函式返回值型別的格式、好處和需要遵守的規則?
格式:型別識別符號 &函式名(形參列表及型別說明)
好處:在記憶體中不產生被返回值的副本(注意:正是因為這點原因,所以返回乙個區域性變數的引用是不可取的。因為隨著該變數生存期的結束,相應的引用也會失效,產生runtime error!)
注意事項:
(1)不能返回區域性變數的引用。原因是區域性變數會在函式返回後被銷毀,因此被返回的引用就成了「無所指」的引用,程式會進入未知狀態。
(2)不能返回函式內部new分配的記憶體的應用。原因是雖然不存在區域性變數被銷毀的問題,可是又會面臨其他尷尬局面。例如,被函式返回的引用只是作為乙個臨時變數出現,而沒有被賦予乙個實際變數,那麼這個引用所指向的空間就無法釋放,造成memory leak。
(3)可以返回類成員的引用,但最好是const。
4.什麼時候需要使用「常引用」?
如果既要利用引用提高程式的效率,又要保證傳遞給函式的資料不在函式中被改變,就應使用常引用。
5.「引用」與指標的區別是什麼?
指標通過某個指標變數指向乙個物件後,對所指向的變數間接操作。程式中使用指標,程式的可讀性差。而引用本身就是目標物件的別名,對引用的操作就是對目標物件的操作。
6.什麼時候使用指標?什麼時候使用引用?什麼時候應該按值傳遞?
下面是一些指導原則:
對於那些函式,它們只使用傳遞過來的值,而不對值進行修改。
(1)如果物件資料很小,如內建資料型別或小型結構,使用按值傳遞。
(2)如果資料物件是陣列,則使用指向const的指標。
(3)如果資料物件是較大的結構,則使用const指標或者const引用,以提高程式的效率。
(4)如果資料物件是類物件,則使用const引用。
對於那些函式,它們需要修改傳遞過來的值。
(1)如果資料物件是內建資料型別,則使用指標。
(2)如果資料物件是陣列,則只能使用指標。
(3)如果資料物件是結構,則使用指標或者引用。
(4)如果資料物件是類物件,則使用引用。
C (二)引用和指標
引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。定義的格式是 型別 引用變數名 已定義過得變數名 引用的特點 1 乙個變數可以取多個別名 2 引用必須初始化 3 引用只能在初始化的時候引用一次,不能改變為再引用其他的變數。include using namespace std vo...
C 21 引用和指標
一般說到誰和誰怎麼樣,要麼說兩者的相似點,要麼兩者的區別,這裡我們也要說二者的區別和聯絡,同時,也不僅僅是區別和聯絡這麼簡單,因為你可能會發現在變數賦值,函式傳參這兩點還是有很多值得品一品的。最直觀的賦值方面的區別 首先我們先說二者的區別和聯絡。int a 1 int p a int a 1 int...
C 學習筆記(二)引用與指標
一.引用和指標的異同 1.指標在定義時,可以不初始化,引用在定義時必須初始化 2.指標變數指向的位址可以根據需要動態修改,引用只要和某個變數繫結後就不能改變。3.指標本身需要占用4個位元組存放空間,而引用本身不要不用分配記憶體空間。4.使用sizeof求指標變數的大小總是4個位元組,表示位址所佔的空...