在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 ...