C语言中对二维数组的指针化表示和对二维数组元素的表示
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)。