指標 引用 const

2021-06-19 21:47:19 字數 3208 閱讀 8198

宣告語句

=基本資料型別

+宣告符。 宣告符命名了乙個變數並指定該變數為與基本資料型別有關的某種型別。

一.  引用

1.   定義引用時,程式把引用和它的初始值物件繫結在一起,而不是把初始值拷貝給引用。無法令引用重新繫結到另外乙個物件。

int  ival = 2;

int  &refval = ival;

2.引用必須初始化,初始值必須是乙個物件而不能是字面值。

3.引用不是物件,它只是為乙個已經存在的物件所起的另外乙個名字。不能定義引用的引用。引用不是物件,沒有實際的位址,所以不能定義指向引用的指標。

4.為引用賦值實際上是把值賦給了與之繫結的物件。獲取引用的值實際上是獲取了與之繫結的物件的值。以引用作為初始值實際上是與之繫結的物件最為初始值。

5.引用的型別必須要和與之繫結物件的型別嚴格匹配。

二.指標

int *p = &ival;

1.指標是物件,允許對指標賦值和拷貝,而且在指標的生命週期內它可以先後指向幾個不同的物件。指標無須在定義時賦初值。

2.指標存放某個物件的位址,要想獲取該位址,需要使用取位址符(操作符&)。

3.宣告語句中指標的型別實際上被用於指定它所指向物件的型別,二者必須嚴格匹配。

4.如果指標指向了乙個物件,允許使用解引用符(操作符*)來訪問該物件。

5.給解引用的結果賦值實際上是給指標所指的物件賦值。

6.空指標:int *p1 =nullptr;   int *p2 = 0;    int *p3 = null;

7.不能把int變數直接賦給指標。

8.如果指標的值為0,條件則為false,否則為true。

三 . void*指標

1.    void*是個特殊的指標,用於存放任意物件的位址。

2.    不能直接操作void*指標所指的物件。

四.指向指標的指標

1.指標是在記憶體中的物件,有自己的位址,因此允許把指標的位址再放到另乙個指標上。

五. 指向指標的引用

int  *p;

int  *&r = p; //r是乙個對指標p的引用。(離r最近的是&)

離變數名最近的符號對變數的型別有最直接的影響。

面對一條複雜的指標或者引用的宣告語句時,從右往左閱讀。

六.const

1.const物件一旦建立後其值不能改變,所以const物件必須初始化。

2.預設情況下const物件只在檔案內有效,要想在多個檔案之間共享const物件,必須在變數的定義前面新增extern關鍵字。   extern  const  int bufsize = 252;

七. const的引用

1.對常量的引用不能被用作修改它所繫結的物件。

const  int  a =1024;

const  int  &r  = a; //要讓常量引用指向常量物件。

2.對const的引用可能引用乙個非const物件

int  a =21;

const int  &b = a; //允許將

constint&

繫結到乙個普通

int物件上。不允許通過b修改a的值。

八.指標與const

1.指向常量的指標不能用於改變其所指物件的值,要想存放

常量物件的位址,只能使用指向常量的指標。

2.和常量引用一樣,指向常量的指標沒有規定所指物件必須

是乙個常量。指向常量的指標僅僅要求不能通過該指標改變物件的值。

const   double  pi  =3.14;

const   double *cptr = π

double   a = 2.1;

cptr = &a; //不能通過cptr改變a的值。

九.const指標

1.指標是物件,允許把指標本身定為常量。常量指標必須初始化,一旦初始化,它的值(存放指標中的那個位址)不能被修改。不變的是指標本身的值而非指向的那個值。

int  a = 98;

int  *const  b = &a;//可以用b去修改a的值。

const  double pi = 3.14;

const  double *const  pip = π//pip是指向常量物件的常量指標。

十.頂層const

1.頂層

const:指標本身是個常量。頂層const可以表示任意的物件是常量。

底層const:指標所指的物件是個常量。用於宣告引用的const都是底層const。

int  a=0;

int  *const p1 = &a; //不能改變p1的值,頂層const

const  int  c = 42; //不能改變c的值,頂層const

const  int  *p2 = &c; //允許改變p2的值,底層const

const  int  *const p3 = p2;//靠右的const是頂層const,靠左的是底層const。

const  int&r = c;//用於宣告引用的const都是底層const

2.當執行物件拷貝操作時,頂層

const

不受影響,執行拷貝

操作並不會改變被拷貝物件的值。當執行拷貝操作時。拷

入和拷出的物件必須具有相同的底層

const資格。

p2 = p3; //正確:p2和p3都是底層const,p3頂層const部分不受影響。

int  *p = p3;//錯誤:p3包含底層const,而p沒有。

十二.關鍵字

1.   typedef關鍵字:型別別名。

typedef  double  wages; //wages是double的同義詞。

typedef  wages base, *p ;//base是double同義詞,p是double*同義詞。

2.   using關鍵字:別名宣告。

using   si = sales_item; //si是sales_item的同義詞。

3.   auto關鍵字:型別說明符,讓編譯器替我們去分析表示式所屬的型別。

auto  a = 0 ; *p =&a; //i是整數,p是整型指標。

4.   decltype關鍵字:型別指示符,選擇並返回運算元的資料型別。

const  int  c = 0, &cj = c;

decltype(c)  x = 0; //x的型別是const int

decltype(cj) y = x; //y的型別是const int&,y繫結x

引用,const引用,指標

引用,const引用,指標 一 引用 1 定義 引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。2 宣告方法 型別 引用變數名 已定義過的變數名。3 特點 l 乙個變數可以取多個別名 但引用與其所代表的變數共享同一記憶體空間 模擬 人的別名 l 引用必須初始化,且必須宣告引用的型別...

指標和引用,const 指標和const 引用

指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...

引用 指標 const

int temp int 資料型別 型別修飾符 temp 變數 引用 為物件起了另外乙個別名,沒有自己的記憶體空間,定義時必須初始化,只能繫結乙個物件且不能更換繫結。指標 指向另一種型別的符合型別,有自己的記憶體空間,可以指向不同的物件。1 const限定符 其使變數的值不能改變,所以使用const...