c 指標詳解系列1

2021-10-10 08:03:09 字數 4230 閱讀 3736

二、指標和常量

三、指標和陣列

總結指標是乙個特殊的變數,它裡面儲存記憶體的乙個位址。

**如下:

#include

using

namespace std;

intmain()

;int

* p = a;

cout<" "<<

sizeof

(a)<<

"\n"

<" "<<

sizeof

(p)<<

"\n"

<<

*p<<

" "<<

sizeof

(*p)

; cout<<

""

sizeof

(p)<<

"\n"

<<

*p<<

" "<<

sizeof

(*p)

}

0x7ffc58bbba20 20

0x7ffc58bbba20 8

1 40x7ffc58bbba24 8

2 4

陣列名即陣列首位址

sizeof(陣列名):陣列占用的記憶體大小

sizeof(指向陣列首位址的指標):位址占用記憶體大小,64位計算機,8個位元組。

指標p++後,p指向的位址加sizeof(int)=4個位元組。

**如下:

#include

using

namespace std;

intmain()

10 0x7ffd09b863c4 10

4 8 4

0x7ffd09b863c8 0x7ffd09b863c4 10

8 8 4

int const *p中表示常量指標,int * const p表示指標常量,其中常量指標也可寫作const int *p。

**如下:

int a,b;

int*

const p =

&a;//指標常量

*p =9;

//操作成功

p =&b;

//操作錯誤

intconst

* m =

&a;//常量指標

*m =9;

//操作錯誤

m =&b;

//操作成功

**如下:

#include

using

namespace std;

intmain()

;int

* p = arr;

int* p2 = arr+1;

cout<<<

" "<<

*(arr+3)

<<

" "<<

*(p+3)

<<

" "<<

*(p2+3)

}

4 4 4 5

指標陣列:首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身的大小決定,每乙個元素都是乙個指標,在32 位系統下任何型別的指標永遠是佔4 個位元組。它是「儲存指標的陣列」的簡稱。

陣列指標:首先它是乙個指標,它指向乙個陣列。在32 位系統下任何型別的指標永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道,具體要看陣列大小。它是「指向陣列的指標」的簡稱。

int *p1[5];

int (*p2)[5];

「「優先順序高於」*」,因此p1和結合形成陣列,int表示陣列內的元素是int型別的指標。因此p1是有指標元素夠成的陣列。

而p2直接和左邊結合,指標指向陣列,因此是陣列型別的指標。

**如下:

#include

using

namespace std;

intmain()

; cout<<<

" "<<

*(arr+3)

sizeof

(arr[3]

)<<

" "<<

sizeof(*

(arr+3)

)<<

" "<<

sizeof

(arr+3)

"array prt"

*pa)[5

];pa =

&arr;

cout<" "<<

*pa<<

" "<<<

" "

" "<<

*(arr+3)

<<

" "<<*(

*(pa+3)

)<<

" "<<

*pa[3]

cout<<

&arr[3]

<<

" "<<(*

(pa+3)

)

cout<<

sizeof

(arr)

<<

" "<<

sizeof

(pa)

<<

" "<<

sizeof

(*pa)

}

4 4

4 4 8

array prt

0x7ffc22b94070 0x7ffc22b94070 0x7ffc22b94070 0x7ffc22b94070

4 4 32764 32764

0x7ffc22b9407c 0x7ffc22b940ac

20 8 20

通常用來表示二維陣列及二維陣列的函式傳參。

一維陣列賦值給陣列指標時,需要取陣列位址或對其進行強制轉換,另外相當於二維陣列中只有乙個行元素,pa+3的位址沒有意義,*(pa+3)也無法顯示。因此會出現上圖的問題。

**如下:

#include

using

namespace std;

intmain()

;int

(*p)[4

]= a;

for(

int i=

0; i<3;

++i)

return0;

}

1 2 3 4

5 6 7 8

9 10 11 12

**如下:

#include

using

namespace std;

intmain()

指向二維陣列時,指標陣列和陣列指標訪問陣列元素時完全相同,但函式傳參時,只能用陣列指標。

**如下:

#include

using namespace std;

intmain()

;int

(*pa)[4

];// array ptr

pa = aa;

for(

int i=

0; i<3;

++i)

cout<<

"\n"

;int

* pb[3]

;// ptr array

for(

int i=

0;i<

3;i++

) pb[i]

= aa[i]

;for

(int i=

0; i<3;

++i)

return0;

}

指標乙個儲存記憶體位址的變數;

指標多重巢狀;

常量指標和指標常量的區別?

陣列指標和陣列指標的區別?

指標訪問陣列。

指標詳解系列1 指標的定義

指標的描述 以下的所有地方都基於c89標準 指標與陣列,結構,聯合等一樣也是一種資料物件,其值是另外乙個物件的位址 這是重點,指標變數裡面儲存的內容是另外乙個物件的位址 指標 得名於這樣的事實 其內容 指向 另外乙個物件。指標可以指向任何型別 完整型別的或者不完整型別 的物件。乙個指標還可以指向其他...

C語言 指標詳解1

一,指標 1.位址 記憶體單元的編號叫位址 2.指標 記憶體單元的位址叫指標 變數的位址叫指標 3.指標變數 儲存變數位址的變數叫指標變數 說明 在不作 區分的情況下,將位址指標指標變數統稱指標 4.指標變數的形式 儲存型別資料型別 指標變數名 例如 int p 說明 儲存型別 同普通變數,指標變數...

C 指標詳解

指標是乙個特殊的變數,它裡面儲存的數值被解釋為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者指標所指向的記憶體區,還有指標本身所佔據的記憶體區。去掉宣告中指標的名字,剩下的就是指標的型別。例如 int ptr 指標的型別是int char p...