天天看點

談談【指針】與【一維數組】的那些事

談談【指針】與【一維數組】的那些事

《《《《《正文》》》》》

《前言》

對于數組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裡!