【C 語言入門】162.指標與下標運算子([])

今天我們來介紹指標與下標的運算值,我們在上一篇文章介紹過,v 是一個陣列,n 是一個指標。

n 裡面存放的是 v[0] 的位址。

我們來探討一下,指標和陣列使用下標運算子有甚麼不同?

那甚麼叫下標運算子呢?

存取陣列元素的時候,我們在陣列名稱[]中間有一個編號,這編號就是索引號,這裡的中括號就是下標運算子。

C 語言對於下標運算,也就是中括弧,是有特殊意義的,a[b] 代表的是把 a 和 b 相加之後,外面取一個間接運算子——星號(*)。

int v[5];
int *n = v;
n[0] =0; //a[b] 就是 *(a+b),n[0] 就是 *(n+0)

v 是個陣列,不能直接加一個整數,但是指標可以,所以 v 會隱性轉型成 v[0] 的位址。

C 語言中,我們使用陣列,和使用一個指向陣列元素的指標的時候,他會有點相似性,就在於中括弧這個運算子,並沒有限制 a 和 b 要是甚麼。

0[v] 和 v[0] 是一樣的意思。

所以在 C 語言,中括弧這個下標運算,其實算是語法堂,無論我們對陣列或指標做,其實都可以用同樣的方式解釋他。

int v[5];
int *n = v;
n[0] = *n;
n[1] = *(n+1);
n[2] = *(n+2);

當 n 存放的是 v[0] 的位址的時候,n[0] 其實就是 v[0],n[1] 其實就是 v[1],n[2] 其實就是 v[2]。

當我們使用 v,也就是陣列名稱本身的時候,也可以把隱性轉型成指標

int v[5];
int *n = v;
n[0] = *n;       n[0] = *v;
n[1] = *(n+1);   n[1] = *(v+1); 
n[2] = *(n+2);   n[2] = *(v+2);

事實上,n[0] = *n 以及 n[0] = *v 這兩個在運算中的差異性是非常小的。

Leave a Comment

Your email address will not be published. Required fields are marked *