分类: C/C++
2014-06-15 18:51:22
看下面的例子:
#include
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<
运行结果如下:
80
4
1
0012FEF8
0012FEF8
0012FEF8
11
11
2
2
通过上面的例子,我们总结二维数组和数组指针的用法如下:
一维数组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。