已知:int m=10;
int &x=m正確
int &y=10
.int &z;
float &t=&m;
解析
引用就是某一變數(目標)的乙個別名,對引用的操作與對變數直接操作完全一樣。
引用的宣告方法:型別識別符號 &引用名=目標變數名;
舉個例子:
int a;
int &ra=a; //定義引用ra,它是變數a的引用,即別名
說明:(1)&在此不是求位址運算,而是起標識作用。
(2)型別識別符號是指目標變數的型別。
(3)宣告引用時,必須同時對其進行初始化。
(4)引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。
ra=1; 等價於 a=1;
(5)宣告乙個引用,不是新定義了乙個變數,它只表示該引用名是目標變數名的乙個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。故:對引用求位址,就是對目標變數求位址。&ra與&a相等。
(6)不能建立陣列的引用。因為陣列是乙個由若干個元素所組成的集合,所以無法建立乙個陣列的別名。
引用的主要作用:
(1)在引用的使用中,單純給某個變數取個別名是毫無意義的,引用的目的主要用於在函式引數傳遞中,解決大塊資料或物件的傳遞效率和空間不如意的問題。
(2)用引用傳遞函式的引數,能保證引數傳遞中不產生副本,提高傳遞的效率,且通過const的使用,保證了引用傳遞的安全性。
(3)引用與指標的區別是,指標通過某個指標變數指向乙個物件後,對它所指向的變數間接操作。程式中使用指標,程式的可讀性差;而引用本身就是目標變數的別名,對引用的操作就是對目標變數的操作。
(4)使用引用的時機。流操作符《和》、賦值操作符=的返回值、拷貝建構函式的引數、賦值操作符=的引數、其它情況都推薦使用引用。
int * p[n];
int (* )p[n];
int * p();
int (*)p();
int *p[n];—–指標陣列,每個元素均為指向整型資料的指標
int (*)p[n];—p為指向一維陣列的指標,這個一維陣列有n個整型資料
int *p();——函式帶回指標,指標指向返回的值
int (*)p();—-p為指向函式的指標正確
解析
int *p[4]; //表示指標陣列,有四個元素,每個元素都是整型指標。
int (*p)[4]; //表示行指標,所指物件一行有四個元素。
int *p(void); //表示函式,此函式無參,返回整型指標。
int(*p)(void) ;//表示函式指標,可以指向無參,且返回值為整型指標的函式。
出錯處理
詞法分析
目標**生成
**管理正確
解析
①典型的編譯程式通常包括:詞法分析、語法分析、語義分析、中間**生成、中間**優化、目標**生成、**管理;
②編譯的每個階段所需要的資訊多數從**中讀取,產生的中間結果都記錄在相應的**中,可以說整個編譯過程就是造表、查表的過程
牛客網 鍊錶 錯題集
2019年6月23日 單向鍊錶佇列 使用鍊錶作為底層資料結構實現的佇列 適用於壓縮儲存稀疏矩陣的兩種儲存結構是 三元組表的結點儲存了行row 列col 值value三種資訊,是主要用來儲存稀疏矩陣的一種資料結構。十字鍊錶將行單鏈表和列單鏈表結合起來儲存稀疏矩陣。鄰接矩陣空間複雜度達o n2 不適於儲...
牛客網錯題錦集day3
1.css 樣式,通過設定左和右 auto 可以把塊元素調整到中間位置。2.下面哪條宣告能固定背景 a a.background attachment fixed b.background attachment scroll c.background origin initial d.backgro...
牛客網 錯題整理(4)
錯題集 1.沒用引數的兩個函式是不能過載的.說法是否正確?答案 錯誤 解析 const 可以構成過載 2.math.round 11.5 等於 答案 12 解析 首先要注意的是它的返回值型別是long,如果 math.round 11.5f 那它的返回值型別就是int,這一點可以參考api 其次它返...