(17)指標和陣列

2021-07-24 08:05:11 字數 1127 閱讀 5487

在c++語言中,指標和陣列有非常緊密的聯絡,使用陣列的時候編譯器一般會把它轉換成指標。對陣列的元素使用取位址符就能得到指向該元素的指標。

陣列有乙個特性:在多數用到陣列名字的地方,編譯器都會自動的將其替換為乙個指向陣列首元素的指標。

當使用陣列作為乙個auto變數的初始值時,推斷得到的型別是指標而非陣列。

當使用decltype關鍵字時上述轉換不會發生,decltype返回的型別仍然是陣列。

指標也是迭代器:

迭代器支援的操作,陣列的指標全部都支援。如何像迭代器一樣遍歷元素呢?

一通過陣列名或者陣列首元素的位址得到指向首元素的指標

二通過下標獲取陣列中尾元素下一位置的位址如:

int arr[10]=;

int *p=arr; //獲取首元素指標

int *e=&arr[10];//尾元素下一位置的指標

for(int *b=p;b!=e;++b);

int *pb=begin(a);

int *pe=end(a);

begin函式返回的是指向陣列首元素的指標,end函式返回的是指向陣列尾元素下一位置的指標,這兩個函式定義在iterator標頭檔案中。

解引用、遞增、比較、與整數相加、兩個指標相減等,用在指標和用在迭代器上意義完全一樣。給乙個指標加上(減去)某整數值,其結果仍是指標。新指標的指標相比之前前進(後退)了該整數值個位置。

兩指標相減的結果是它們之間的距離。結果型別是一種名為ptrdiff_t的標準庫型別,和size_t一樣,ptrdiff_t也是一種定義在

cstddef標頭檔案中的機器相關型別,但是ptrdiff_t是一種帶符號型別。

解引用和指標互動使用:

int b = ;

int *p = b;

int i= *(p+2); //i的值為b[2]的值

而且只要指標指向陣列的元素都可以執行下標操作,如:

int *pt = &b[2];

int j = ptr[1]; //等價於*(ptr+1),就是b[3]表示的那個元素

int k = ptr[-1] //等價於*(ptr-1),就是b[1]表示的那個元素

5 3指標和陣列

定義乙個大小為10的陣列a 10 int a 10 包含了a 0 a 1 a 9 共計10個元素 定義指標 int pa pa指向陣列a的第0個元素,即pa為a 0 的位址。pa a 0 對陣列元素a i 的引用也可以寫為 a i 這樣的形式,這一點至少初看起來很令人吃驚。在求陣列元素a i 的值時...

12 指標和陣列

指標和陣列 不是陣列的專屬 注意 其實陣列就是指標,指標也是陣列 陣列名 include intmain 指向陣列首元素的指標 include intmain int argc,char argv int p null p指標變數指向首元素 p a 0 p a int i 0 for i 0 i 1...

2019 09 28指標和陣列

2019.09.28指標和陣列 2019.09.28 指標指標的重要性 指標是c語言的靈魂 指標就是位址 位址就是指標 指標變數是存放記憶體單元位址的變數 指標的本質是乙個操作受限的非負整數 結構體動態記憶體的分配和釋放 eg include int main void int main void ...