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] = %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)));

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

4 則留言

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

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Exit mobile version