回覆列表
-
1 # 程式設計知識分享
-
2 # 玩轉嵌入式
指標是C語言中很重要的一部分內容,可以說是C語言的精髓,但是指標在初學的時候確實比較難理解,尤其是與陣列混在一起之後,很容易搞混淆。下面講解一下指標如何訪問陣列,及注意事項。
首先看幾張圖。
上圖中,定義了一個int型陣列,有4個元素,定義了指標變數p。p=&a[0]的意思是將首元素的地址賦值給指標變數。
p=a的意思是將首元素的地址賦值給指標變數。
*p=a的意思是將首元素的地址賦值給指標變數,在宣告的時候完成了賦值。
由以上可以看出,p=&a[0],p=a,*p=a 三者的含義是一致的。
陣列名a代表的就是陣列地址,所以p=&a[0],p=a,二者是等價的。
宣告時賦初值:
int *p=&a[0] 和 int *p=a是一致的。
透過指標引用陣列元素時:a[1]=*(p+1)。
必須要注意的是:
a:陣列首元素的地址(每個元素都是int型別)。
a+2:陣列的第3個元素的地址。
* (a+2):陣列的第3個元素的地址。
採用指標訪問陣列時速度要快於直接訪問陣列的下標,所以指標的效率要比陣列高很多。
使用指標訪問陣列元素。
現在假設有一個整型陣列定義為 int data[5] ;
現令data[0]=0;data[1]=1;data[2]=2;data[3]=4;data[4]=4;
然後涉及到了我們的問題怎麼訪問這5個元素
通常的做法可以用下標法,即直接用data[0]表示第一個元素,data[1]表示第二個元素等等。
如果採用指標的方法,我們要注意幾個問題。首先指標是一個儲存地址的變數,而陣列的名即是陣列的地址,*運算子則可以將某地址所儲存的值的出來。
由以上三點可得, data表示第一個元素的地址,那麼*data即是第一個元素的值,data+1表示第二個元素的地址,那麼*(data+1)即是第二個元素的地址。完整程式如下