指標和引用都是實現了對其它物件的間接訪問
引用(reference)
1、引用是為物件起了另外乙個名字。通常將宣告符寫成&d的形式來定義引用型別,其中d是宣告的變數名
如:int a=20;int &b=a;//即a和b指向同一塊記憶體
2、引用無法重新繫結到另外乙個物件,即只能繫結乙個物件,因此引用必須初始化。
3、引用即別名,引用並非物件,它只是為乙個已經存在的物件所起的另外乙個名字。為引用賦值,實際上是把值賦給了與引用繫結的物件。
4、引用只能繫結到物件上,無法與字面值或某個表示式的計算結果繫結在一起。
指標(pointer)
取值符:*
1、指標就是乙個物件,允許對指標賦值和拷貝,可以指向不同的物件
2、指標無須在定義時賦值。
3、定義指標型別的方式,是將宣告符寫成*d的形式,其中d是變數名。
如: int *a,*b,*p; //定義三個指標變數,未賦值
int a=20; int *p=&a;//整型指標——等價於p=&a
;即指標變數p指向a所在的記憶體
int a;int *p=a;//陣列指標
4、在宣告語句中指標的型別實際上被用於指定它所指向的型別,所以二者必須匹配,如果指標指向了乙個其它型別的物件,對該物件的操作將發生錯誤。
指標值
指標值即位址
如果指標指向了乙個物件,則允許使用取值符(解引用符)*來訪問該物件
對指標解引用會得出所指的物件,因此如果給解引用的結果賦值,實際上就是給指標所指向的的物件賦值
空指標(null pointer)
不指向任何物件
生成空指標的方法:
1、int *p=nullptr;//最直接(c++11新標準)最值得推薦用法
2、int *p=0;
3、int *p=null; //需要包含#include不建議使用
注:建議初始化所有指標,如果實在不清楚初始化時,指標指向何處,可以先把它初始化未nullptr或0
賦值和指標
1、給指標賦值就是令它存放乙個新位址,從而指向乙個新的物件
2、賦值時,分清到底是改變了指標的值,還是改變了指標所指向物件的值
3、任何非0指標對應的條件值都是true,即空指標的條件值是false
void* 指標
可以存放任意物件的位址,乙個void* 指標存放乙個位址(此型別指標不經常使用)
復合型別
基本資料型別 + 一組宣告符(宣告符=修飾符+變數名)
常見: 型別 + (修飾符) + 變數名
一條定義語句可能定義出不同型別的變數
如:int i=1024, *p=&i, &j=i;
int* i, j;//定義乙個整型指標變數i和乙個整型變數j(雖然*位置不同,但
i和j還是不同)
//即int* i==int *i
涉及指標或引用的說明,一般有兩種方法
//int 為型別識別符號 *為修飾符 p為變數名
1、把修飾符和變數名寫在一起:int *p;//建議習慣性使用
2、把修飾符和型別名寫在一起:int* p;
指向指標的指標
指標是記憶體中的物件,像其他物件意義
C (二)引用和指標
引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。定義的格式是 型別 引用變數名 已定義過得變數名 引用的特點 1 乙個變數可以取多個別名 2 引用必須初始化 3 引用只能在初始化的時候引用一次,不能改變為再引用其他的變數。include using namespace std vo...
C 集錦二 引用和指標
1.什麼是 引用 宣告和使用 引用 需要注意哪些問題?引用就是某個目標變數的 別名 對引用的操作與對變數的操作效果完全相同。宣告乙個引用需要對其進行初始化,這不是新定義了乙個變數,它只是表示該引用名是目標變數名的乙個別名,它本身不是一種資料型別,因此引用不佔儲存單元。2.使用 引用 作為函式引數有哪...
C 21 引用和指標
一般說到誰和誰怎麼樣,要麼說兩者的相似點,要麼兩者的區別,這裡我們也要說二者的區別和聯絡,同時,也不僅僅是區別和聯絡這麼簡單,因為你可能會發現在變數賦值,函式傳參這兩點還是有很多值得品一品的。最直觀的賦值方面的區別 首先我們先說二者的區別和聯絡。int a 1 int p a int a 1 int...