C语言中对二维数组的指针化表示和对二维数组元素的表示

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言中对二维数组的指针化表示和对二维数组元素的表示:

例如二维数组为:a[3][4]={{10,20,30,40},

{20,30,40,50},

{30, 40, 50,60} .

设数组行数为i,列数为j。

第一种表示方法:

int *p=a[0];

其中:a[0]表示数组中第一行第一列元素的地址。由于二维数组中元素地址的分配规律是先行后列分配。即第一行元素分配地址结束后,给第二行元素分配地址。所以第i行第j列元素的表示方法为:*(4i+j)。

第二种表示方法: (*p)[4]=a

首先说明几点:

对于一个数列,例如a[3][4]

a[0][0]表示第一行第一列元素的值;

a[0]表示第一行第一列元素的地址;

a表示系统为数列中第一行第一列元素地址分配的地址;

a[1]表示为第二行第一列元素的地址;

a[0]+1表示为第一行第二列元素的地址;a+1表示第二行第一列元素的地址的地址;*(p+i)表示为第i行第一列元素的地址;则(*p)[4]=a的作用在于:把第一行第一列元素的地址的地址a赋给p;(*p)后接[4]的目的是说明每一行有4个元素。

有以上理解,则第i行第j列元素的表示方法为:*(*(p+i)+j)

第三种表示方法:

*p[3]={a[0],a[1],a[2]};

此法在本质上和第二种方法类似,

其区别在于:法三没有把各行第一个元素的地址指针化,也就是说不存在地址的地址这一说法;第一行第一列元素的地址为a[0]; 第二行第一列元素的地址为a[1];

第三行第一列元素的地址为a[2];

则第j列元素的表示方式为*(p[i]+j)。

相关文档
最新文档