發表文章

陣列的指標【int(*v)[ ] and int *v】

圖片
int n[3]={6,7,8}; int (*v)[3]=&n; int *v=n; 在宣告陣列的指標(*v)[3],*v=n兩者使用上很接近,但實際上卻不相同。 陣列的指標【int (*v)[3]=&n】是把整個陣列n的記憶體位址都賦予到*v,也就是v[0]=&n[0],v[1]=&n[1],v[2]=&n[2]。 而指標【int *v=n 或 *v=&n】v是指向n[0](第一個元素)的記憶體位址。

指標陣列特性與基礎運用注意要點

指標陣列有一個特性,它可以將不同變數、不同陣列的記憶體位址存取在指標陣列,例如: int a=1; int b=10; int c=100; int *az[ ]={&a,&b,&c};//取址一般 變數 不會 隱性轉型(陣列才會),一定 要打& 取址。 printf("%d\n",*az[0]); //所以*az[0]==a==1;//az[0]==&a=同一個記憶體位址; int AA[2]={10,15}; int BB[2]={20,25}; int CC[2]={25,30}; int *AAZZ[ ]={AA,BB,CC};//取址 陣列 會 隱性轉型, 可 以 不 用 打& 取址。 printf("%d\n",AAZZ[1][1]); //所以*AAZZ[1][1]==AA[2]==15; //而且*AAZZ[2][0]==CC[0]==25; 當然 不同長度的 陣列 也是 可以 將它們整理 在同一個 指標陣列 之內,在 隨機存取 是可以單獨使用,只需 避免 運用到 超出陣列範圍 的空間,不過若是 循序存取 就要相當 注意 在 迴圈運用 上是否會運用到 超出陣列範圍 之外造成 未定義行為 。

指標陣列與指標【重要】

指標陣列與指標在運用起來感覺是類似的,但其實它是有其差異的。 指標陣列另外用法,可以將散在各處的變數或陣列整合起來,但當陣列大小不同時要注意小心使用