指標與陣列(一) 指標認知

2021-07-15 04:44:34 字數 2053 閱讀 3357

一.定義與初始化

1.       如何理解指標?

1)        指標是變數。

2)        指標是乙個位址,指向的是個型別。

3)        指標指向的是位址,位址指向的是內容。

4)        指標的指標,是面對於指標的變數。

5)        指標型別的位元組長度由作業系統決定(32位作業系統為4位元組,64位作業系統為8位元組)

2.定義指標的幾種規範

int  *p;  //重在表示 *a 是 int型的。

int*  p;  //重在表示 int* 是乙個型別(複核型別),它是指向 int 的指標。

二.*與&運算子詳解

*是取指標目標運算子  其後跟隨的必須是指標類變數

&是取位址運算,對任意變數都可以進行取位址操作

1.       指標的型別和指標所指向的型別

指標型別:

1)        int  *ptr; //指標的型別是int*

2)        char  *ptr; //指標的型別是char*

3)        int  **ptr; //指標的型別是int**

4)        int  (*ptr)[3]; //指標的型別是int(*)[3]

5)        int  *(*ptr)[4]; //指標的型別是int*(*)[4]

指標所指向的型別:

1)        int  *ptr; //指標所指向的型別是int

2)        char  *ptr; //指標所指向的型別是char

3)        int  **ptr; //指標所指向的型別是int*

4)        int  (*ptr)[3]; //指標所指向的型別是int()[3]

5)        int  *(*ptr)[4]; //指標所指向的型別是int*()[4]

2.       指標的值

(*p)++:對p指向的記憶體空間進行操作(加1)à5 + 1 = 6

p++:對p對應的記憶體空間加1(步長)à0x1000 + 4(步長) = 0x1004

num++:對num對應的記憶體空間加1à5 + 1 = 6

一維指標儲存基本變數的位址

二維指標儲存一維指標的位址

三維指標儲存二維指標的位址

遠指標:超過二維的指標。

三.指標的運算

1.       指標的賦值運算

空指標:不允許操作,不允許訪問。null為(void *)0的巨集定義

野指標:(詳情見野指標及野指標的避免)

指標的算術運算:

à警告:從不相容的指標型別賦值(檢查步長)

長步長賦值給短步長:資料不完整

短步長賦值給長步長:資料可能越界

void *——萬能指標:可指向任意型別的指標,但不能取值。

2.       指標的算術運算

指標+整數:加步長

指標-指標:兩指標相隔的資料個數。

char  *ptr = 「hello world」;

char  *str = ptr + sizeof(ptr);àstr – ptr = 11

int a[10] = ;à&a[9]- &a[0] = 9

c語言指標初探 一 指標與陣列

一 陣列名指標 c 編譯器將陣列名解釋為指標 include using namespace std int main cout sz 編譯器將陣列名解釋為陣列記憶體區域的首位址,對一維陣列來說要實現對某個元素的訪問,既可以用陣列名 下標的形式,也可以用間接引用 陣列名 偏移 陣列元素的指標形式 指...

指標(一) 指標與二級指標

一 指標理解 二 二級指標 三 指標表示式 在指標表示式中,變數做左值與右值含義不同,通常變數做左值,變數名對應儲存空間 而變數做右值,代表資料內容。那麼,若有 char ch a char cp ch 則,下列 能做左值或右值嗎?ch 可以做右值 cp 可以做右值,也可以做左值 cp 可以做右值 ...

c語言與指標 (一)指標與變數

寫在前面 指標是學習c語言時,最讓人頭痛的乙個難題。但是指標不僅是c語言的精髓,它還貫穿整個計算機底層儲存與訪問方式。指標實際上就是位址,指標變數用來存放指標 位址 指標變數也是一種變數,它和不同的變數同樣要佔一定的儲存空間。但指標變數與不同的變數不同之處在於,指標的儲存空間存放的不是不同的資料,而...