指针与二维数组的关系

设有如下数组说明:
  int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 
  在C/C++中,可将二维数组的每一行看成一个元素,即数组a包含了三个元素a[0]、a[1]、a[2],数组名a是该一维数组a的指针,即a[0]元素的指针,a+1是a[1]元素的指针,a+2是a[2]元素的指针。

指针与二维数组的关系可用下图概括。其中:
行指针:行方向的指针a、a+1和a+2,是指向一维数组的指针,其指针类型为含有三个整型元素的一维数组;
列指针:列方向的指针a[0]、a[0]+1、a[0]+2、… 、a[2]+2,其指针类型为整型。
注意:尽管a与a[0]、a+1与a[1]、a+2与a[2]的值相同,但类型不同,若有必要,可相互转换。
图片地址:http://hi.csdn.net/attachment/201201/27/0_1327640416M0bM.gif

推广:设有说明“int a[M][N];”(M、N均为符号常量),则元素a[i][j](0≤i<M,0≤j<N)的指针为:
  ①a[i]+j,原因如图②*(a+i)+j,因a[i]等价于*(a+i)
  ③*(&a[i])+j,因a+i等价于&a[i]④&a[i][j]
元素a[i][j]也有如下等价表示:
  ①*(a[i]+j)②*(*(a+i)+j)③(*(a+i))[j]


例 用指针输出二维数组的元素值。
#include<iostream.h>
#include<iomanip.h>

void main(void)
{ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j,*p;

  cout<<"用指针输出数组的全部元素:\n";
  for(p=(int*)a,i=0;i<9;i++)
  { if(i&&i%3==0) cout<<'\n';
  cout<<*p++<<'\t';
  }

cout<<"\n用四种不同方法输出数组的元素:\n";
  for(i=0;i<3;i++)
  for(j=0;j<3;j++)
  cout<<*(a[i]+j)<<'\t'
  <<*(*(a+i)+j)<<'\t'
  <<(*(a+i))[j]<<'\t'
  <<a[i][j]<<'\n';
  cout<<"用指针输出数组的各个元素:\n";
  for(i=0,p=a[0];p<=a[2]+2;p++,i++)
  { if(i&&i%3==0) cout<<'\n';
  cout<<setw(4)<<*p;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值