1、多維數(shù)組元素的地址;
多維數(shù)組也可以稱之為數(shù)組的數(shù)組,其元素均為數(shù)組,如有一個二維數(shù)組:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};,它有三個元素:a[0],a[1],a[2],每一個元素又都是一個一維數(shù)組,分別包含4個元素,因此,a是由3個一維數(shù)組(分別是a[0],a[1],a[2])組成的數(shù)組。
已經(jīng)知道,C++中,數(shù)組名代表的是此數(shù)組的首元素地址,但在int a[3][4]中,a代表的是a數(shù)組第一個元素a[0]的地址,注意,a的首元素不是一個整型變量,而是一個一維數(shù)組,如果a數(shù)組的起始地址為2000,則a=2000,a+1=2016,a+2=2032,
同樣,數(shù)組名代表的是此數(shù)組的首元素地址,a數(shù)組中,a[0]是一個一維數(shù)組,a[0]即是此一維數(shù)組的首元素地址,即a[0]=&a[0][0]; a[0]+1=&a[0][1]; a[0]+2=&a[0][2]; a[0]+3=&a[0][3],a[1],a[2]同樣如此。
因此,如要知道a[1][2]的值,可這樣表示:*(a[1]+2) ,而a[1]又與*(a+1)無條件等價,因此,*(a[1]+2)=*(*(a+1)+2) ,由此可知,二維數(shù)組a中,若需得出a[i][j]的值,可以表示為:*(*(a+i)+j)。
2、指向多維數(shù)組的指針變量:
如一、遍歷 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}的值。
#include<iostream>
using namespace std;
int main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
for(int* p=a[0];p<a[0]+12;p++)
cout<<*p<<" ";
cout<<endl;
return 0;
}
由于無論是一維數(shù)組,還是多維數(shù)組,在內(nèi)存中均是按線性排列存放的,因此使指針變量p指向a[0]的首元素地址,依次循環(huán)輸出。如圖:
a[0][0] 1←p=a[0] |
a[0][1] 2 ←p+1 |
a[0][2] 3 ←p+2 |
a[0][3] 4 ←p+3 |
a[1][0] 5 ←p+4 |
a[1][1] 6 |
a[1][2] 7 |
a[1][3] 8 |
a[2][0] 9 |
a[2][1] 10 |
a[2][2] 11 |
a[2][3] 12 ←p+11 |
3、用指向數(shù)組的指針作函數(shù)參數(shù):
如例一,用函數(shù)調(diào)用實(shí)現(xiàn):
#include<iostream>
using namespace std;
int main()
{
void output(int (*p)[4]);
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
output(a);
return 0;
}
void output(int(*p)[4]) //注意實(shí)參形參的類型匹配
{
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
cout<<*(*(p+i)+j)<<" ";
cout<<endl;
}