二维数组与数组指针的用法

#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;
}

运行结果如下:

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]),指向这个数组的首行元素,b的值为&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。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值