用指针访问多维数组

从一维数组开始说起:

int a[3]={1,2,3};
int *p=a;
p指向数组的首地址,*p就是数组的第一个元素。

如果是二维数组:

int a[3][3]={1,2,3,4,5,6,7,8,9};
int *p=a;
这种写法是错的。二维数组是元素为一维数组的一维数组。显然,a表示的是一个有3个元素(每个元素是由3个元素构成的数组)的数组的首地址,所以要定义指向a的指针,必须进行如下定义:

int a[3][3]={1,2,3,4,5,6,7,8,9};
int (*p)[3]=a; //小括号不可省略

这样的话,要求二维数组a中的某个元素:比如:a[2][2]=9;

int a[3][3]={1,2,3,4,5,6,7,8,9},*p1,t;
int (*p)[3]=a;
p1=*(p+2);//p1指向数组a[3]的首地址
t=*(p1+2);//此时t的值等于a[2][2]

这样很容易理解,也很容易写出用指针访问二维数组的代码。

只要仔细琢磨,理解清楚了用指针访问二维数组的方法,用指针访问多维数组当然也不在话下。

下面有一段代码,用指针遍历数组,反复琢磨可以帮助理解。

#include <iostream>
using namespace std;
int main()
{
	
	int a[3][3]={1,2,3,4,5,6,7,8,9};
    for(int (*p)[3]=a;p!=a+3;p++)
      for(int *t=*p;t!=*p+3;t++)
        cout<<*t<<endl;
	
return 0;
}



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值