2 3復合型別 指標

2021-10-09 17:19:57 字數 1694 閱讀 1269

指標是」指向「另外一種型別的復合型別。與引用類似,指標也實現了對其他物件的間接訪問。但兩者有很多不同:1.指標本身是乙個物件,允許對指標複製和拷貝,而且在指標的生命週期內它可以先後指向幾個不同的物件;2.指標無須在定義時賦初值和其他內建型別一樣,在塊作用域內定義的指標如果沒有初始化,也將有乙個不確定的值。

指標的定義

如在一條語句中定義了幾個指標變數,每個變數前面都必須有符號*

int *p1,*p2;//都是指向int型物件的指標

double dp,*dp2;//dp是double型物件,dp2是指向double型物件的指標

獲取物件的位址

使用取位址符(&)

int ival=42;

int *p=&ival;//p存放變數ival的位址,或者說p是指向變數ival的指標

因為引用不是物件,沒有實際位址,所以不能定義指向引用的指標。

同引用一樣,除p56p534兩種例外情況,所以指標型別都要和他所指向的物件型別嚴格匹配。

指標值應屬下列四狀態之一

1.指向乙個物件

2.指向緊鄰物件所佔空間的下乙個位置(注:不可訪問,否則後果無法預計

3.空指標,意味著指標沒有指向任何物件(注:可定義,但不可訪問,否則會出現意想不到的錯誤

4.無效指標,除上述情況之外的

利用指標訪問物件

使用解引用符(*)

int ival=42;

int *p=&ival;

cout<<*p; //由解引用符號得到指標p所指向的物件,輸出42

*p=0;//給解引用的結果賦值,實際上也就是給指標所指向的物件賦值

cout<<*p; //由解引用符號得到指標p所指向的物件,輸出0

對指標解引用會得到所指的物件,同樣如果給解引用的結果賦值,實際上也就是給指標所指向的物件賦值。

解引用操作符僅適用於那些確實指向了某個物件的有效指標。

空指標

不指向任何物件,使用指標前可先檢查是否為空。

int *p1=nullptr;//c++11新特性,等價於int *p1=0;

int *p2=0;//位址為0000000,而不是整型數值0

int *p3=null;//null為預處理變數,使用時預處理器會自動將它替換為實際值

int zero=0;

int *pi=zero;//錯誤!把int變數直接賦給指標是錯誤的操作

1.新標準下最好使用字面值nullptr,同時盡量避免使用null

2.#2句賦值0,是位址為0,而不是int型的0,把int變數直接賦給指標是錯誤的操作,這是編譯器預留的特殊用途位址;

建議:初始化所有指標,並且在可能的情況下,盡量等定義了物件之後在定義指向它的指標。

給指標賦值就是令他存放乙個新的位址,從而指向乙個新的物件;但仍要注意型別的一致性。

**任何非0指標對應的條件值都是true

void 指標

void*指標可以存放任意物件的位址,當我們不確定型別時,常用void定義,但無法訪問記憶體空間中所存的物件。

C Primer Rush 2 3 復合型別

復合型別 compound type 是指基於其他型別定義的型別。c 語言有幾種復合型別,本章將介紹其中的兩種 引用和指標。2.3.1 引用 引用 reference 為物件起了另外乙個名字,引用型別引用 refers to 另外一種型別。通過將宣告符寫成 d的形式來定義引用型別,其中d是宣告的變數...

復合型別之指標

指標的含義 指標是 指向 另外一種型別的復合型別。與引用類似,指標也實現了對其他物件的間接訪問。指標和引用的區別 1 指標是乙個物件,允許對指標賦值和拷貝,而且指標在其生命週期內可以先後指向幾個不同的物件 2 指標無需在定義時賦初值。和其他內建型別一樣,在塊作用域內定義的指標如果沒有進行初始化操作,...

第2章 2 3復合型別

2.3.2 指標 2.3.3 理解符合型別的宣告 復合型別是指基於其他型別定義的型別。c 有幾種符合型別,其中兩種為 引用 指標。2.3.1 引用 引用為物件起了另外乙個名字,引用型別引用另外一種型別。通過將宣告符寫成 d 的形式來定義引用型別,其中 d 是宣告的變數名 int a 1024 int...