用指针访问多维数组

来源:互联网 发布:1元洗车软件 编辑:程序博客网 时间:2024/05/16 15:34

从一维数组开始说起:

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



0 0
原创粉丝点击