指標和陣列
首先明確一點,指標之間的加減不是簡單的加減,而是隻的是指標所指向元素個數的加減,也就是說是元素個數的偏移
int *p11 = (int *)0xfff4;
int *p12 = (int *)0xfff0;
cout<<p11-p12<<endl;
輸出應該是4/4 =1
1. 一維陣列
int a[5];
cout<<sizeof(a)<<" "<<sizeof(&a)<<" "<<sizeof(&a[0])<<endl;
//output:20 4 4
//a是一個陣列,所以a的長度5*sizeof(int);&a表示陣列的指標,指標的長度都是4
cout<<a<<" "<<&a<<" "<<&a[0]<<endl;
//output:0027FBAC 0027FBAC 0027FBAC
//陣列和指標不同之處在於,編譯器並沒有為陣列a分配一個空間儲存其地址,所以a就表示這個陣列的地址;&a表示是陣列的指標,而這個陣列是5個元素的陣列,&a表示一個指向五元陣列的指標
cout<<a+1<<" "<<&a +1 <<" "<<&a[0]+1<<endl;
//output:0027FBB0 0027FBC0 0027FBB0
//a在數值上是陣列的首地址,a+1就是第二個元素的地址,0027FBAC+4 = 0027FBB0 ;a不是int *p,但是為了幫助理解可以把a看做int *p,則a+1就是其所指元素的偏移1,
//&a可以看成是int (*)[5],所以&a+1,就是&a所指向元素的偏移1,而&a所指向的元素是一個5元的陣列,所以&a+1 = 0x0027FBAC+5*4 =0x0027FBAC+0x14 = 0x 0027FBC0
2 .二維陣列
在記憶體中二維陣列也是一維陣列的排列方式
int a[3][4]
但是編譯器是這樣理解的:
a是一個3個元素的陣列,而元素裡存的是4元陣列的地址
a+1表示第二個元素,此時a+1還是指向“4元陣列”的指標,*(a+1)變為指向int的指標,但是a+1和*(a+1)的值相同,譬如都是002BF7E4
所以a[1][2]的地址可以有以下幾種表示方式:
out<<&a[1][2]<<" "<<&a[0][0] +1*4+2<<" "<< (*(a+1)+2)<<endl;
還有一個比較繞的程式(紅色字型表示可以替代):
int calendar[12][31];
int (*month)[31];
for (month = calendar;month<calendar+12/*&calendar[12]*/;++month)
{
int *day;
for (day = *month;day<*month +31/*&(*month)[31]*/;++day)//在這裡就可以深刻理解到本來month就是一個指向31個int陣列的指標,month的元素就是陣列,month偏移的單位也是這個陣列大小,*month就是表示31個int的陣列,此時*month表示指向int 的指標
{
*day = 0;
}
}
相關文章
- 陣列指標和指標陣列陣列指標
- 指標陣列和陣列指標與二維陣列指標陣列
- 陣列指標,指標陣列陣列指標
- 陣列指標 指標陣列陣列指標
- 陣列和指標陣列指標
- 指標陣列與陣列指標指標陣列
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 二維陣列和指標陣列指標
- 徹底搞清C/C++中一維陣列,二維陣列,指標,陣列指標和指標陣列以及指向指標的指標,行地址和列地址之間的關係C++陣列指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- 陣列指標陣列指標
- 陣列指標:a pointer to an array,即指向陣列的指標陣列指標
- 指標和二位陣列指標陣列
- C++語言中陣列指標和指標陣列徹底分析(系列一) (轉)C++陣列指標
- 補充內容:C++語言中陣列指標和指標陣列徹底分析 (轉)C++陣列指標
- C++ 指標陣列與陣列指標的區別C++指標陣列
- 指向陣列的指標陣列指標
- C語言程式設計基礎:指標陣列與陣列指標C語言程式設計指標陣列
- C語言學習歷程(十二)陣列指標與指標陣列C語言陣列指標
- 【C】 28_指標和陣列分析(上)指標陣列
- 【C進階】28、指標和陣列分析指標陣列
- 日常學習儲存--陣列和指標陣列指標
- C語言指標和陣列基礎C語言指標陣列
- 二維陣列與指標陣列指標
- C指標和陣列的關係詳解指標陣列
- C語言指標和陣列筆試題C語言指標陣列筆試
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- C語言 指標與陣列C語言指標陣列
- 陣列與指標&氣泡排序陣列指標排序
- 字串指標與字元陣列 (轉)字串指標字元陣列
- 【原創】淺談指標(九)二維陣列和多級指標相關指標陣列
- 要點1:指標、陣列和複合字面量指標陣列
- C語言核心之陣列和指標詳解C語言陣列指標
- 指標對陣列排序選擇法和冒泡法指標陣列排序
- 指標和陣列的關係(Android之JNI)指標陣列Android
- C進階指南(2):陣列和指標、打樁陣列指標
- 在COM中使用陣列引數-陣列指標 (轉)陣列指標