指標和引用是在使用中經常弄混淆的兩個概念。
引用(reference)為物件起了另外乙個名字,用符號&表示。 &name,例如:
int i=1024;
int &ref=i;
一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結(bind)在一起,而不是將初始值拷貝給引用。一旦初始化完成,引用將和它的初始值物件一直繫結在一起。因為無法令引用重新繫結到另外乙個物件,因此引用必須初始化。
ref=2; //即 i=2;
int &ref2=ref; //ref2 繫結到了那個與ref繫結的物件上,即i上
引用並非物件,因此,不能定義引用的引用。引用只能繫結到物件上,不能與字面值繫結
int &ref3=1024; //error
指標:
指標與引用的區別:其一,指標本身就是乙個物件,允許對指標賦值和拷貝,而且在指標的生命週期內它可以先後指向不同的物件;其二,指標無須在定義時賦值。
double *ptr; //ptr 是指向double型物件的指標
指標的值是某個物件的位址
double val=1.0;
double *pval=&val;
利用指標訪問物件要用解引用符
cout<<*pval; //指標解引用就是所指向的物件
*pval=2.0; //val的值被改變了,指標pval並沒有變
void * 是一種特殊的指標型別,可用於存放任意物件的位址。但不能直接操作void* 指標所指的物件,因為我們並不知道這個物件到底是什麼型別,也就無法確定能在這個物件上做哪些操作。
指向指標的指標
int i=1024;
int *pi=&i;
int **ppi=π
指向指標的引用
int i=42;
int *p;
int *&r=p; //r 是乙個對指標p的引用
r=&i; //賦值改變的是左邊的物件,這裡r是p的另乙個名字,所以給r 賦值就是令p指向i
*r=0; //解引用r得到i,也就是p所指向的物件,將i的值改為0
理解r的型別,最好的辦法是從右向左閱讀r的定義。&表示r是乙個引用,左邊的部分是用以確定r引用的型別到底是什麼。* 說明r引用的是乙個指標,int 說明r引用的是乙個int 指標
const
因為const物件一旦建立後其值就不能再改變,所以const物件必須初始化。
在多個檔案之間共享const物件:file1: extern const int bufsize=1024; file2 :extern const int bufsize;
const 的引用
const int ci=1024;
cont int &r1=ci; //fine
int &r2=ci; //error
如果對r2 的初始化正確,則可以通過r2來改變ci的值,這跟ci是const int型別 不能改變是衝突的,所以r2語句是錯的
int i=42;
int &r1=i; //fine
const int &r2=i; //fine
(注:引用的初始值必須是乙個物件,但const 的引用可以是字面值。)
const int &r3=2; //fine
int &ref=10; //error
const 的指標(指向const物件的指標)
同樣的,過乙個物件是const,則只能使用指向常量的指標;普通指標會嘗試修改所指向物件的值
const double p=3.14;
const double * cptr=&p; // fine
double *ptr=&p; //err
const 指標(常量指標)
int i=10;
int *const ptr=&i; //ptr 一直指向i
const double pi=3.14;
const double * const ptr2=π //ptr2 是乙個指向常量物件的常量指標
引用遇上const和指標
int a 1 int b 2 const int c a const int d c const int const e c d b 正確 e b 錯誤 d 3 錯誤 int f a int g f int const h f g b 正確 h b 錯誤 g 3 正確當const引用是引用的乙個指...
指標 引用 const
宣告語句 基本資料型別 宣告符。宣告符命名了乙個變數並指定該變數為與基本資料型別有關的某種型別。一 引用 1.定義引用時,程式把引用和它的初始值物件繫結在一起,而不是把初始值拷貝給引用。無法令引用重新繫結到另外乙個物件。int ival 2 int refval ival 2.引用必須初始化,初始值...
引用 指標 const
int temp int 資料型別 型別修飾符 temp 變數 引用 為物件起了另外乙個別名,沒有自己的記憶體空間,定義時必須初始化,只能繫結乙個物件且不能更換繫結。指標 指向另一種型別的符合型別,有自己的記憶體空間,可以指向不同的物件。1 const限定符 其使變數的值不能改變,所以使用const...