C C 指標的運算

2021-09-29 06:20:59 字數 2950 閱讀 8973

1. 指標自增、自減運算

指標的自增自減運算是指標加減運算的特例。指標的自增或自減表示指標從當前位置向前或向後移動sizeof(資料型別)長度的儲存單元。

#include

using

namespace std;

intmain()

;//定義乙個長度為8的int型別的陣列

p = arr;

//p指向arr的首位址,arr是陣列arr[8]的名稱,它所指向的就是arr[8]這個陣列的首位址,所以此處不需要「&」

q =&arr[5]

;//q指向arr[5]的首位址,因為arr[5]是arr中的乙個元素,而不是位址,因此需要取位址符「&」

//如果「=」右邊是位址,就不需要取位址符

//如果「=」的右邊是乙個元素,就需要取位址符

printf

(,arr,

*arr)

;printf(,

&arr[0]

, arr[0]

);printf

(, p,

*p);

printf

(, q,

*q);

printf

("int長度:%d\n"

我們來看一下這段**的執行結果,首先定義了兩個int型別的指標,之後定義了乙個長度為8的int型別的陣列arr[8],之後讓p指向陣列的首位址arrq指向了陣列的低6個元素a[5],接下來看一下輸出結果,我們發現,陣列arr的首位址,就是arr[0]的位址,其中儲存的數就是我們定義的陣列arr中的第乙個值——0,接下來看q,q指向了陣列的低6個元素a[5],我們在最後輸出了int型別的長度為4,因此,q指向的位址為陣列的第乙個元素的位址再加上5個int型別的長度,即19920788+5*4=1992808,搞清楚這些之後,再來看指標的自增、自減運算。

#include

using

namespace std;

intmain()

;//定義乙個長度為8的int型別的陣列

p = arr;

//p指向陣列arr的首位址

printf

(, p,

*p);

p++;//讓指標p增加1,即p指向下乙個整型資料,因此p指向陣列元素arr[1]

printf

(, p,

*p);

* p++

;//先取p指向變數arr[1]的值,然後使指標p增加1,因此p指向arr[2]

printf

(, p,

*p);

(*p)++;

//讀取p指向的變數arr[2]的值,然後變數arr[2]自增1

printf

(, p,

*p);

*++p;

//先使指標p增加1,指向a[3],然後讀取p指向元素的值

printf

(, p,

*p);

++*p;

//將指向元素a[3]自增1

2.兩指標相減

當兩個指標指向同一陣列時,兩個指標的相減才有意義。兩個指標相減的結果為乙個整數,表示兩個指標之間陣列元素的個數;兩指標相加沒有意義。

#include

using

namespace std;

intmain()

;//長度為10的整型陣列

int*pi ,

*qi;

//定義兩個int型別的指標

char

*pc,

*qc;

//定義兩個char型別的指標

pi =

&arr[0]

; qi =

&arr[9]

; pc =

&str[3]

; qc =

&str[8]

; cout <<

"arr[0]和arr[9]之間有"

<<

(qi - pi)

<<

"個元素"

<< endl;

cout <<

"str[3]和str[8]之間有"

<<

(qc - pc)

<<

"個元素"

<< endl;

return0;

}

3.指標陣列

指標陣列是以指標變數為元素的陣列,指標陣列的每個元素都是同一型別的指標變數。

資料型別識別符號 * 指標陣列識別符號[常量]

4.陣列指標

陣列指標是指向陣列的指標。它表明定義的首先是乙個指標,然後才是什麼型別的指標。

資料型別識別符號 ( 指標名)[常量]*

如 int (*p)[5];

C C 指向指標的指標

我在一篇教程中看到下面這段,它描述指向指標的指標是如何運作的。引用文章相關段落如下 如果我們接著這麼寫 ipp ip2 我們就改變了 ipp 指向的那個指標 也就是 ip1 現在它指向 ip2 所指的地方。也就是說 ip1 現在它指向了 j 我的疑問是 為什麼在第二幅圖里,ipp 還是指向 ip1 ...

c c 之指標的指標總結

指標變數p的值是001bfd18,而 號的作用是取值,p即取位址001bfd18中存放的值 其實p中存放的是位址,只是當cout時,如果指標是字元型指標,那麼會輸出p中位址指向的記憶體中的內容 這裡是h 直到遇到 0 才結束。所以直接輸出p時會輸出hello,而將p強制轉換為void 時輸出的是位址...

關於C C 的指標

1.陣列和指標作為函式的引數的注意點 將陣列作為引數的時候,會被轉化成指標,例子如下 include using namespace std char fo foliage void my arr func char foliage 10 void my pointer func char foli...