2007/12/12

array pointer in C

今天讀書會的時候,帶學弟練功遇到幾個以前沒想過的問題,C 語言的 array 可以使用指標來存取。

int a[5]={0,1,2,3,4};

printf("value of a = %d (%X)\n",a,a);
printf("value of a[0] = %d\n",*a);


上面可以看到 a 裡面存的不是數值,而是記憶體位置。這個記憶體位置指到的值就是陣列第一個整數的值。

既然知道陣列指標的用法,就可以利用指標去存取陣列的內容。

printf("a[1] = %d\n",a[1]);
printf("a[1] = %d\n",*(a+1));
printf("a[1] = %d\n",*((int *) (((void *) a)+sizeof(int)*1)));


第三種用法通常用不到,看看就好。

4 則留言:

  1. 我無法同意 "C 語言的 array 其實是指標" 這句話... / \

    回覆刪除
  2. 我也不會解釋,反正宣告成陣列變數,那個變數是指標

    回覆刪除
  3. 你可以利用指標去存取陣列
    但是指標和陣列不應該當成同樣的東西
    以如下的狀況來說
    int a[10], c[5];
    int * b, * d;
    *( a + 5 )和*( c + 2 )是安全的
    但是*( b + 3 )和*( d + 1 )是不安全的
    雖然b = d和d = a是合法的
    不過a = c則否

    陣列是一段連續的記憶體空間集合
    而指標只是用來存取它的手段之一

    回覆刪除