c语言的二维数组的指针访问

c语言的二维数组的指针访问

ID:8807266

大小:59.50 KB

页数:5页

时间:2018-04-08

c语言的二维数组的指针访问_第1页
c语言的二维数组的指针访问_第2页
c语言的二维数组的指针访问_第3页
c语言的二维数组的指针访问_第4页
c语言的二维数组的指针访问_第5页
资源描述:

《c语言的二维数组的指针访问》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、二维数组的指针访问——王炳华指向二维数组的指针及用指针访问二维数组,是学习指针的最大难点。如果真正弄懂了这个问题,就可以说你学会了使用指针。一、二维数组的指针指针就是地址,二维数组的指针就是二维数组在内存中的存储地址。相对于一维数组的地址而言,二维数组的地址稍微复杂一点。二维数组的地址与一维数组的地址的相同点在于:①、它们的每一个元素都有一个存储地址(称为元素地址);②、它们都是将全部元素在内存中按顺序占用一段连续的存储空间;即对于一维数组,下标为1的元素的存储单元紧接在下标为0的元素的存储单元之后,下标为2的元素的存储单元紧接在下标为1的元素的存储单元之后……直到

2、最后一个元素。对于二维数组,下标为0的行的各个元素按顺序存储完之后,下标为1的行的元素紧接其后按顺序存储……直到最后一行的最后一个元素。二维数组的地址与一维数组的地址的不同点是:它除了有元素地址外,还有标识各行起始位置的行首地址(称为行的首地址)。行的首地址和行的首元素的地址具有相同的地址值,但是它们是两种不同的地址:若有定义inta[5][5];则a[0][0]是a数组首行首列元素(代表该元素的值)。而&a[0][0]是首行首元素的地址。&&a[0][0]则是首行的首地址。从这个意义上讲,可以说行的首地址是一种二重地址。二、行的首地址、行的首元素地址和行的首列元素

3、的值的关系可以把某行的首地址、某行首列元素的地址、某行首列元素(代表它的值),看成是由高到低的三个层次。某行首列元素作一次&运算得到该行首列元素的地址,某行首列元素的地址再作一次&运算得到该行的首地址。从这个意义上讲,可以说元素的地址是一重地址,而行的首地址是二重地址。某行的首地址作一次*或[]运算得到该行的首元素的地址,某行的首元素的地址作一次*或[]运算得到该行的首元素的值。三、运算符*、&、[]之间的关系1.[]运算符[]是下标运算符,只适用于数组和指向数组的指针变量。其优先级与()同级,高于*和&。结合方向是左结合性(自左至右)。2.三者的关系*与&互为逆运

4、算*与[]等效[]与&互为逆运算3.作用前面已经提到:可以把某行的首地址、某行首列元素的地址、某行首列元素(代表它的值),看成是由高到低的三个层次。*和[]都是将运算对象从高层向低层转化。&是将运算对象从低层向高层转化。如:行的首地址作一次*或[]运算得到该行的首元素的地址。元素的地址作一次*或[]运算得到该元素的值。而元素(代表它的值)作一次&运算得到该元素的地址。某行的首元素的地址作一次&运算得到该行的首地址。一四、数组名是地址常量若有定义intb[5];一维数组名b是什么?b与b+0是等价的;由于*与&互为逆运算,所以b+0与&*(b+0)等价;由于*与[]等

5、效,所以*(b+0)与b[0]等价,&*(b+0)就与&b[0]等价。可见一维数组名b与第5页共5页&b[0]等价。&b[0]是一维b数组首元素的地址,可见一维数组名b是一维b数组首元素的地址,也称为一维数组的基地址。若有定义inta[5][5];二维数组名a是什么?a与a+0是等价的;由于*与&互为逆运算,所以a+0与&*(a+0)等价;由于*与[]等效,所以*(a+0)与a[0]等价,&*(a+0)就与&a[0]等价。&a[0]与&a[0]+0是等价的。由于*与&互为逆运算,所以&a[0]+0与&*(&a[0]+0)等价;由于*与[]等效,所以*(&a[0]+0

6、)与&a[0][0]等价,&*(&a[0]+0)就与&&a[0][0]等价,可见二维数组名a与&&a[0][0]等价。&&a[0][0]是二维数组a的首行的首地址,可见二维数组名a是二维数组a的首行的首地址。必须指出:数组名是一种地址常量,不能作++、--、+=、-=、=等运算;可以作+运算,不能作–运算;可以作*运算,一般不作&运算;可以与指向本数组的同类型的指针作关系运算,一般不作逻辑运算。一、行的首地址、元素的地址及元素的值的常见形式1.行的首地址的表示形式若有一个m行n列的二维数组a[m][n]。数组名a是它的首行的首地址,也即是它0行的首地址。从刚才的推导

7、出:二维数组a的首行的首地址有a、a+0、&a[0]、&a[0]+0以及&&a[0][0]等五种形式。由于a+0是0行的首地址。a+1就是1行的首地址,a+i就是i行的首地址。由于*与&互为逆运算,a+i与&*(a+i)等价,由于*与[]等效,所以*(a+i)与a[i]等价,&*(a+i)就与&a[i]等价。&a[i]与&a[i]+0是等价的。由于*与&互为逆运算,所以&a[i]+0与&*(&a[i]+0)等价;由于*与[]等效,所以*(&a[i]+0)与&a[i][0]等价,&*(&a[i]+0)就与&&a[i][0]等价。这样i行的首地址有a+i、&a[i]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。