今天讀書會的時候,帶學弟練功遇到幾個以前沒想過的問題,C 語言的 array 可以使用指標來存取。
int a[5]={0,1,2,3,4};
printf("value of a = %d (%X)n",a,a);
printf("value of a[0] = %dn",*a);
上面可以看到 a 裡面存的不是數值,而是記憶體位置。這個記憶體位置指到的值就是陣列第一個整數的值。
既然知道陣列指標的用法,就可以利用指標去存取陣列的內容。
printf("a[1] = %dn",a[1]);
printf("a[1] = %dn",*(a+1));
printf("a[1] = %dn",*((int *) (((void *) a)+sizeof(int)*1)));
第三種用法通常用不到,看看就好。
我無法同意 “C 語言的 array 其實是指標” 這句話… /
我也不會解釋,反正宣告成陣列變數,那個變數是指標
你可以利用指標去存取陣列
但是指標和陣列不應該當成同樣的東西
以如下的狀況來說
int a[10], c[5];
int * b, * d;
*( a + 5 )和*( c + 2 )是安全的
但是*( b + 3 )和*( d + 1 )是不安全的
雖然b = d和d = a是合法的
不過a = c則否
陣列是一段連續的記憶體空間集合
而指標只是用來存取它的手段之一
感謝,已更正。