一)、一維數組和指針
若有以下語句:
int *p,s[10],I;
p=s;
則s[i]的地址可用下面三種方法表示:
(1)&s[i] (2) s+i (3)p+i。
因此可以用s[i],*(s+i),*(p+i)來表示s[i]。由於s[i]可以用表達式*(s+i)來表示,同理*(p+i)也可以用p[i]來表示。事實上在c語言中,[]並不僅僅是用作表示數組元素的記號,而是一種運算符。因此當p指向數組s的首地址時,表示數組元素s[i]的表達式有下面四種方法:
(1)s[i] (2)*(s+i) (3) *(p+i) (4) p[i]
在這裏s是數組名,是不可變的,而p是指向數組首地址的指針,其值是可變的。
二)、二維數組和指針
若有以下語句:
#define M 10
#define N 8
int a[M][N];
則二維數組元素的地址可以用下面5種方式表示:
(1)&a[i][j]
(2)a[i]+j
(3)*(a+i)+j
(4)&a[0][0]+i*N+j
(5)a[0]+i*N+j
相應的數組元素也有5種表達方式:
(1) a[i][j]
(2) *(a[i]+j)
(3) *(*(a+i)+j)
(4) *(&a[0][0]+i*N+j)
(5) (*(a+i))[j]