引用就是變數的乙個別名,對同乙個儲存單元起了兩個不同的名字。
引用在定義時必須進行初始化,而且必須用同型別的物件進行初始化。如下面的例子所示:
int ival = 1024;
int &refval = ival; // ok
int &refval2; // error
int &refval3 = 10; // error
int i = 42;
const int &r = 42; // ok
const int &r2 = r+i; // ok
double dval = 3.0;
const int &ri = dval; // ok
指標的定義就不羅嗦了,主要關注一下、指標的可能取值、指標的初始化、void*指標、指標的下標操作、const與指標的結合
int ival = 1024;
int *pi3 = 0; //3
int *pi1 = &ival; //1
另外需要注意,雖然指標可以不必在定義的時候初始化,但是一定要避免使用未初始化的指標。
指標的初始化
int ival = 0;
const int c_ival = 0;
int *pi = c_ival; // ok
pi = 0; // ok
pi = ival; // error
void*指標的操作十分有限:1 與另乙個指標進行比較;2 作為函式的返回值或者引數型別;3 給另乙個void*指標賦值。典型用法如下:
int i = 3;
int *pi = i;
void *pv = &i; //ok
pv = pi; // ok
指標的下標操作如同陣列,但需注意不要對非法位址進行解引用。
指標與const的結合有兩種方式:1 指向const物件的指標;2 const指標。定義如下:
int i = 10;
const int *pi;
int const* pic = &i; // 必須在定義時對const指標進行初始化,就像對待const物件以及const引用一樣
指向const物件的指標是指該指標自以為指向了const物件,因此可以用同型別的const物件或者非const物件對其進行初始化。但是不能通過該指標來對指向的物件進行修改。但可以更改該指標指向的物件。
const指標則必須在定義時初始化。並且不能重新指向同型別變數,即使是自己也不可以。(詳見《c++ primer》第四版111頁)
另外需要注意,如下的**表示的是const指標而非指向const物件的指標:
typedef int *pint;
const pint cint;
這裡,typedef不是簡單的文字擴充套件。const修飾的pint,而pint是指標。 const修飾符和指標
char const cpp1 null cpp1 char cp1 cp1 char c1 cpp1是乙個常量指標,所以cpp1需要在定義的時候初始化,它指向乙個char 型的指標cp1。char const cpp2 cpp2 char const cp2 const cp2 char c2 c...
C C 中const修飾符總結
c c 中的const是乙個修飾符,它允許你指定乙個語義上的約束,也就是可以通過const指定乙個 不該被改動 的物件,而編譯器會強制實施這項約束。const語法很多 但都不複雜 下面我將分別講述各種語法及其作用。在講述const修飾符用在指標上有什麼效果之前先來看下指標不加const修飾符的情況 ...
對於const修飾符的總結
例如 const int a 10 這將使得a的值為乙個常量,後面無法改變,需要注意 使用const修飾的變數必須被初始化const int a 這樣的 會使得編譯失敗。int a 10 const int b a 使用const修飾的引用將無法改變引用物件的值,即類似 b 5 這樣的 會使得編譯失...