![二维数组与数组指针的用法 二维数组指针传递](http://img.aihuau.com/images/31101031/31043143t01e2c720117963b1ab.jpg)
看下面的例子:#include<iostream>using namespace std;int main(){ int v[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}}; int (*a)[10]=v; cout<<sizeof(v)<<endl; // 整个二维数组的大小4*2*10=80 cout<<sizeof(a)<<endl; // 指针大小4个字节 cout<<**a<<endl; //输出数组首个元素1 cout<<*a<<endl<<a[0]<<endl<<a<<endl; //&v[0][0]的值 cout<<**(a+1)<<endl<<*(a[1])<<endl; //输出数组第二行的首个元素11 cout<<*(*a+1)<<endl<<*(a[0]+1)<<endl; //输出数组第一行的第二个元素2 return 0;}运行结果如下:80410012FEF80012FEF80012FEF8111122通过上面的例子,我们总结二维数组和数组指针的用法如下:一维数组a,如int a[5],a相当于一个指针常量(指向内容不能变),类型为int [5] (等价于指针中的类型int *),指向这个数组的首个元素,a的值为&a[0]。二维数组b,如int b[2][5],b相当于一个指针常量,类型为int [2] [5] (等价于指针中的类型int (*)[5]),指向这个数组的首行元素,a的值为&b[0][0]。具体用法如下:① b+1表示一个新指针,其指向的位置相对于b向后移动了1*sizeof(数组每行),即指向数组的第二行元素。其值为&b[1][0]。注意,这里不能用 b++,因为b的值不能改变。 ②*b也相当于一个指针,指向b所指向的那行元素的首个元素,类型为int [5],*b的值也为&b[0][0]。 ③b[0]用法同*b,表示指向b中首行元素的首个元素的指针,类型也为int [5],b[0] 的值同样是&b[0][0],b[1]对应于*(b+1)。 ④b[i]+j, *(b+i)+j 就表示了指向二维数组b中位置为(i ,j)的元素的指针。 ⑤虽然b,*b,b[0]的值相同,但由于其指向类型不同(或者说自身类型不同),用法就不一样。 ⑥如果定义一个数组指针,如int (*p) [5]=b,上述b的用法都适用于p。