C 學習筆記4 指標

2021-09-26 11:26:10 字數 4302 閱讀 9102

1. 什麼是指標?

指標是乙個變數,其值為另乙個變數的位址,即,記憶體位置的直接位址。

在使用指標儲存其他變數位址之前,對其進行宣告。指標變數宣告的一般形式為:type *var-name;

type 是指標的基型別,它必須是乙個有效的 c++ 資料型別,var-name 是指標變數的名稱。星號是用來指定乙個變數是指標。以下是有效的指標宣告:

int

*ip;

/* 乙個整型的指標 */

double

*dp;

/* 乙個 double 型的指標 */

float

*fp;

/* 乙個浮點型的指標 */

char

*ch;

/* 乙個字元型的指標 */

不同資料型別的指標之間唯一的不同是,指標所指向的變數或常量的資料型別不同。

2. 如何使用指標

定義乙個指標變數、把變數位址賦值給指標、訪問指標變數中可用位址的值。

#include

using namespace std;

int main (

)

column 1

column 2

null 指標

c++ 支援空指標。null 指標是乙個定義在標準庫中的值為零的常量。

指標的算術運算

可以對指標進行四種算術運算:++、–、+、-

指標 vs 陣列

指標和陣列之間有著密切的關係

指標陣列

可以定義用來儲存指標的陣列

指向指標的指標

允許指向指標的指標

傳遞指標給函式

通過引用或位址傳遞引數,使傳遞的引數在呼叫函式中被改變

從函式返回指標

允許函式返回指標到區域性變數、靜態變數和動態記憶體分配

#include

using namespace std;

int main (

)

在大多數的作業系統上,程式不允許訪問位址為 0 的記憶體,因為該記憶體是作業系統保留的。

然而,記憶體位址 0 有特別重要的意義,它表明該指標不指向乙個可訪問的記憶體位置。

但按照慣例,如果指標包含空值(零值),則假定它不指向任何東西。

因此,可以防止誤用乙個未初始化的指標。

#include

using namespace std;

const

int max =3;

int main ();

int*ptr;

// 指標中的陣列位址

ptr = var;

for(

int i =

0; i < max; i++

)return0;

}

#include

using namespace std;

const

int max =3;

int main ();

int*ptr;

// 指標中第乙個元素的位址

ptr = var;

int i =0;

while

( ptr <=

&var[max -1]

)return0;

}

上述兩個**被編譯和執行時,會產生同樣的結果:

address of var[0] = 0xbfce42d0

value of var[0] = 10

address of var[1] = 0xbfce42d4

value of var[1] = 100

address of var[2] = 0xbfce42d8

value of var[2] = 200

#include

using namespace std;

const

int max =3;

int main ();

for(

int i =

0; i < max; i++

)return0;

}

把指標運算子 * 應用到 var 上是完全可以的,但修改 var 的值是非法的。

這是因為 var 是乙個指向陣列開頭的常量,不能作為左值。

由於乙個陣列名對應乙個指標常量,只要不改變陣列的值,仍然可以用指標形式的表示式。

例如,把 var[2] 賦值為 500:*(var + 2) = 500;

上面的語句是有效的,且能成功編譯,因為 var 未改變。

#include

using namespace std;

const

int max =3;

int main ();

int*ptr[max]

;for

(int i =

0; i < max; i++

)for

(int i =

0; i < max; i++

)return0;

}

當上面的**被編譯和執行時,它會產生下列結果:

value of var[0] = 10

value of var[1] = 100

value of var[2] = 200

#include

using namespace std;

int main (

)

通過檢視 var,ptr,*pptr 的位址可以更加清晰的理解多級間接定址的定址過程。

var的位址=ptr的值=*pptr的值

#include

#include

struct stu

;void

f(_____,

int num),}

; num = s[1]

.num;

strcpy

(name, s[1]

.name);}

main()

,},*p;

p=s;

f(p->name, p->num)

;printf

("%s %d\n"

, p->name, p->num)

;}

為了輸出pp 10003,橫線部分可以寫成

char *name

char name

char* &name

int * myfunction()
c++ 不支援在函式外返回區域性變數的位址,除非定義區域性變數為 static 變數。

#include

#include

#include

using namespace std;

// 要生成和返回隨機數的函式

int*

getrandom()

return r;

}// 要呼叫上面定義函式的主函式

int main (

)return0;

}

當上面的**被編譯和執行時,它會產生下列結果:

624723190

1468735695

807113585

976495677

613357504

1377296355

1530315259

1778906708

1820354158

667126415

*(p + 0) : 624723190

*(p + 1) : 1468735695

*(p + 2) : 807113585

*(p + 3) : 976495677

*(p + 4) : 613357504

*(p + 5) : 1377296355

*(p + 6) : 1530315259

*(p + 7) : 1778906708

*(p + 8) : 1820354158

*(p + 9) : 667126415

C 學習筆記 四 指標 4

類成員指標 本文主要討論 c 中類成員的指標,這部分內容少有使用,也比較難於理解。如果文中有錯誤或遺漏之處,敬請指出,謝謝!需要使用類成員指標的情況是比較少見的,所以一般沒人使用這個語言特性。下面先介紹類成員指標的使用方法,再介紹它的可能應用場合。有時,我們需要在類外的其它地方直接獲得類成員,這時我...

C語言學習4 指標

int a 10 int p a 一級指標 int s p 二級指標 int p 10 指向陣列的指標 int s 10 指標指向放指標的陣列 這個陣列有十個空間 int p 10 開闢10個空間 每個空間放指標 例如 int br 10 int s 10 br int ar 10 int p 10...

《c和指標》摘錄4 指標

記憶體和位址 計算機的記憶體由數以億計的位 bit 組成,每個位可以容納0或1。由於乙個位能表示的值範圍太有限,所以單獨的用處不大,通常許多位合成一組作為乙個單位,這樣就可以儲存範圍比較大的值。指標變數 專門存放變數的位址的變數 定義指標變數 資料型別 變數名 int a 指標變數必須初始化再使用 ...