typedef:宣告新的型別名來代替原有的型別名,比如:
typedef int integer;
相當於用intger來代表int型別,習慣上把用typedef宣告的型別用大寫字母表示。
引用:
引用說白了就是為物件另外起了乙個名字,定義了乙個引用之後所有的操作都是在引用
繫結的物件
上進行的。
定義方式: 將宣告符寫成&d的形式來定義引用型別其中d是宣告的變數名,
int size = 100;
int &sum = size;
要注意的是我們在引用的時候必須要給引用賦值,出生即繫結,像直接int &size 這種方式是不可以的。
那麼問題來了:我們可不可以定義引用的引用呢?答案當然是不可以了,為什麼呢?因為我們說引用只是給物件起了個另外的名字,引用並不是乙個物件,所以我們不能這麼做。另外,我們可以給乙個物件繫結多個引用。
另外,值的注意的是:其他所有型別的引用和要繫結的物件都要嚴格匹配,另外,引用只能繫結到物件上,而不能繫結到字面值或者某個表示式的計算結果上。但是對於常量引用,這條法則不適用,詳細見之後<>處:
常量引用:
int a=1;
const int &t1= a;
和
const int a=1;
const int &t2= a;
這裡的t1,t2都是常量引用。
關於常量引用相關的例子:
int ai=10;
const int ci= 100;
const int &si= ai;//正確的,常量引用可以指向非常量物件
const int &r1 = ci; //正確的,引用及物件都是常量
r1 = 11 //這是錯誤的,因為r1是常量引用,不能修改它所繫結的物件的值
int &r2 = ci //這是錯誤的,不能讓乙個非常量引用指向乙個常量物件,因為非常量引用意味著可以修改物件的值;物件本身是常量,不能更改,所以矛盾。
總結:
const int &指向int 合法 ,不可修改物件值
const int &指向const int 合法 ,不可修改物件值
int&指向int 合法,可修改物件值
int &指向const int 不合法
<>
特例1:在初始化常量引用時允許使用任意表示式作為初始值,只要該表示式的結果最終能轉化為引用的型別就行了。
特例2:允許為乙個常量引用繫結非常量的物件,字面值甚至乙個一般表示式。即const int &p=100;和const int &p=a+b;合法。
指標引用
資料結構教材例項:
list *&p 等價於 list* &l 。list* 表示 乙個指標型別的list結構,&l表示乙個引用,而且是乙個指標引用。list *l 是 乙個list型別的指標。二者使用的區別:在傳遞的函式引數是指標型別的話,那麼編譯器會複製乙個指標,那麼我們在函式內部使用的指標就是複製 之後的指標,而不是原來的指標了。如果需要使用原來的指標 ,則需要傳遞指標引用。即:list *&l,那麼我們在函式 內部操作的指標 還是 原來傳過來的指標物件,也就是說:如果要對這個指標的本身進行操作和改變其內容,就必須使用引用(list *&p),而如果只是為了用它間接訪問的功能(*p)就可以直接傳list *p。下面來個 例子說明下:
void function_1( int *p)
void function_2(int *&p)
int a[100];
int *p = a;
function(p);
// p指向第乙個元素
function_2(p);
//p 指向第二個元素
總結來說:
一般的傳指標,那麼都是複製乙個指標,
如果想要使用原有的指標,就使用指標引用
引用,const引用,指標
引用,const引用,指標 一 引用 1 定義 引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。2 宣告方法 型別 引用變數名 已定義過的變數名。3 特點 l 乙個變數可以取多個別名 但引用與其所代表的變數共享同一記憶體空間 模擬 人的別名 l 引用必須初始化,且必須宣告引用的型別...
C 中的指標 引用 指標引用
在c 指標的用處很大,可以快讀的訪問位址空間,而且本身不佔太大記憶體。指標操作在引數傳遞的時候非常方便。既可以作為傳入引數,又可以作為返回值。但是可不可作為函式的傳出引數呢?下面通過乙個例子來說明。教室裡面包含多個老師,每個老師管理多個學生 學生類 pragma once include class...
指標引用和引用指標的區別
c 在傳參的過程中,指標 和指標引用 是有區別的。雖然,我們往往可以通過傳指標然後通過間址訪問來修改指標所指向物件的值,同樣,通過引用也可以直接修改物件的值。但是,當傳指標的時候有乙個問題,就是,我們雖然可以通過指標來修改指標所指向物件的值,但是我們沒有不能直接修改指標的內容 也就是指標變數存放的位...