利用指標來處理陣列資料基本觀念

可以利用指標取出陣列位址,以及利用陣列位址加減(位移)特性來處理與運作達成條件和目的。
int *n是一個int指標,用以儲存記憶體位址,當有5個int的陣列v【也就是V[5]】,需要每都做加減乘除之類的運算,可以透過n=v(等同n=&v[0])賦予指標(n)的v[0]記憶體位址,以及v[1]+1==v[2]的這種特性來進行處理,也就是n=&v[0],n+1=&v[1]....依此類推,故只要給予運算元*後,就可以改變陣列每一個位址的內容值了,例如:*(n+2)=52+16,其結果v[2]內容值就等於68,*(n+4)=*(n+2)+1,那v[4]內容值就是69。

可以運用此關係配合迴圈或者其他指令達到條件與需求。

#include<stdio.h>
int main(){
int a[5]={6,7,8,9,10};
//&v[0]+1==&v[1];
//&v[2]-1==&v[1];
//&v[2]+&v[3]C語言不合法,但是&v[x]-&v[x]是合法的
//&v[2]+&v[3];;;;;C語言&v[x]+&v[x]不合法,編譯會失敗
//&v[2]-&v[1];;會等於這兩個陣列中間隔了多少的陣列元素
////↑等於1,簡單說就是這兩個位址距離1個元素
//&v[5]-&V[0]==5兩者位址之間有5個元素
//&v[x]-&V[x]會得到一個整數
int *n;//一個int指標
int v[5];//5個int大小的陣列
n=v;//n=&v[0]自動隱性轉型
int size=sizeof(v)/4;//1個int等於4byte
printf("V[0]指標位址:%p\n",n);
*n=69;
*(n+1)=52;
for(int i=0;i<5;++i){
*(n+i)=*(n+i)+i;
}
for(int i=0;i<5;++i){
printf("v[%d]=%d\n",i,v[i]);
}
for(int i=0;i<5;++i){
printf("v[%d]指標位址:%p\n",i,n+i);
}
return 0;
}

留言