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指向陣列的首位址arr,q指向了陣列的低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...