利用指針訪問二維數(shù)組中元素
1)二維數(shù)組a由若干個一維數(shù)組組成在C語言中定義的二維數(shù)組實(shí)際上是一個一維數(shù)組,這個一維數(shù)組的每一個成員又是一個一維數(shù)組。如以上定義的a數(shù)組,則可視a數(shù)組由a[0]、a[1]、a[2]等三個元素組成,而a[0]、a[1]、a[2]等每個元素又分別是由4個整型元素組成的一維數(shù)組??捎胊[0][0]、a[0][1]等來引用a[0]中的每個元素,其它依次類推。C語言中,在函數(shù)體中或在函數(shù)外部定義的一維數(shù)組名是一個地址常量,其值為數(shù)組第一個元素的地址,此地址的基類型就是數(shù)組元素的類型。在以上二維數(shù)組中,a[0]、a[1]、a[2]都是一維數(shù)組名,同樣也代表一個不可變的地址變量,其值依次為二維數(shù)組每行第一個元素的地址,其基類型就是數(shù)組元素的類型。因此,對于二維數(shù)組,象a[0]++這樣的表達(dá)式是非法的。若有表達(dá)式a[0]+1,表達(dá)式中1的單位應(yīng)當(dāng)是2個字節(jié)。在以上定義中,指針變量p的基類型與a[i](0≤i<3)相同,因此,賦值語句p=a[i];是合法的。我們已知a[i]也可以寫成:*(a+i),故以上賦值語句也可寫成:p=*(a+i);。
?
2)二維數(shù)組元素首地址a[i][j] = *(a[i]+j) =*(a+i)[j] == *(*(a+i)+j) = *(&a[0][0]+N*i+j)