![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SO5QjMxIWZ2ATMlNjMyEGOxYzX2QDNyUTM5AzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.png)
《《《《《正文》》》》》
《前言》
對于數組a[5]={1,2,3,4,5},我們知道它的首位址是a,後面對應的位址為a+1,a+2,a+3,a+4,既然我們知道了數組中每一個元素的位置,那我們就可以利用(*)對其資料進行操作了!
《指針變量引用一維數組元素》
定義:
int *p,a[5]={1,2,3,4,5}; p=a;
這樣我們*p=1,就引用了1這個元素,若想引用4這個資料,則*(p+3)=4;這裡唯一注意的地方就是位址的引用不要出界,還有用指針變量引用元素的效率大于其他的方法!
《指針變量和一維數組在函數間的傳遞》
1、實參和形參均為一維數組
問題提出:将數組a[5]={1,2,3,4,5}的第二個元素與最後一個元素交換位置?
第一步:主函數:
void main(void) { int a[5]={1,2,3,4,5}; Swap(a,2,5); }
第二步:Swap形式參數是數組接收數組首位址,位置數1,位置數2,程式如下:
void Swap(int x[],int m,int n) { int temp; temp =x[m-1]; x[m-1]=x[n-1]; x[n-1]=temp; }
其實經過上面的傳遞,a[5] ={1,2,3,4,5}就完全對應x[5]={1,2,3,4,5},對x[]的元素操作最後都會映射到a[]上!
2、實參為一維數組,形參為指針變量
問題提出:将數組a[5]={1,2,3,4,5}的第二個元素與最後一個元素交換位置?
第一步:主函數與上面第1種一樣:
void main(void) { int a[5]={1,2,3,4,5}; Swap(a,2,5); }
第二步:Swap形式參數是指針變量接收數組首位址,位置數1,位置數2,程式如下:
void Swap(int *x,int m,int n) { int *p,temp; p =x; //獲得首位址 temp =*(p+m-1); *(p+m-1)=*(p+n-1); *(p+n-1)=temp; }
經過上面的的傳遞,a[5] ={1,2,3,4,5}中的每一個元素就完全對應*p=1;*(p+1)=2;*(p+3)=4;*(p+4)=5;對其的資料操作就會映射到數組a裡!
3、實參和形參均為指針變量
第一步:主函數,首先我們必須要建立一個指向數組的指針變量,代碼如下:
void main(void) { int *p, a[5]={1,2,3,4,5}; p =a; //首位址獲得 Swap(p,2,5); }
第二步:Swap形式參數是指針變量接收指針變量,位置數1,位置數2,程式如下:
void Swap(int *x,int m,int n) { Int *y,temp; y =x; //獲得首位址 temp =*(y+m-1); *(y+m-1)=*(y+n-1); *(y+n-1)=temp; }
經過上面的的傳遞,a[5] ={1,2,3,4,5}中的每一個元素就完全對應*x=1;*(x+1)=2;*(x+3)=4;
*(x+4)=5;而*x又完全對應*y,對*y的資料操作就會映射到數組a裡了!
4、實參為指針變量,形參為一維數組
void main(void) { int *p, a[5]={1,2,3,4,5}; p =a; //首位址獲得 Swap(p,2,5); }
第二步:Swap形式參數是一維數組接收指針變量,位置數1,位置數2,程式如下:
void Swap(int x[],int m,int n) { int temp; temp =x[m-1]; x[m-1]=x[n-1]; x[n-1]=temp; }
經過上面的的傳遞,a[5] ={1,2,3,4,5}中的每一個元素就完全對應*p=1;*(p+1)=2;*(p+3)=4;*(p+4)=5;而*p,*(p+1)。。。又對應x[],對x[]的資料操作就會映射到數組a裡!