| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 557 人关注过本帖
标题:指针与二维数组的本质
只看楼主 加入收藏
好男儿!
Rank: 2
来 自:陕西省
等 级:论坛游民
帖 子:29
专家分:52
注 册:2013-7-26
收藏
 问题点数:0 回复次数:1 
指针与二维数组的本质
基础:(指针与一维数组)本质: a[i]<=>*(a+i)
变换: a[i]<=>*(a+i)<=>*(i+a)<=>i[a]

指针与二维数组:

1. 本质:type a[10],*p;
p=a;
以后,可以用P代替a,引用数组中的各元素,即瀀嬀椀崀 <=> a[i]; 设type类型为int[20]
type a,b;<=>int[20] a,b;<=>int a[20],b[20];
type a[10],*p;<=>int[20]a[10],*p;<=>int a[10][20],(*p)[20];

int *p[20];<=>int* p[20];<=>type p[20];猀椀稀攀漀昀(p)=80B(字节) p是由20个int*(整形指针)为数组元素组成的数组,p+1将移动4B;
int (*p)[20]; <=>int[20] *p;<=>type *p;猀椀稀攀漀昀(p)=4B(字节) p是一个指类(指针所指向的空间的数据类型)为int[20]的指针变量,p+1将移动80B;
int a[10][20];<=>int[20]a[10];<=>type a[10];愀是一个指类为int[20]的指针常量,a+1将移动80B;

int (*p)[20];指针变量的指类为int[20],意味着p+1将移动80B,相当于移动了a[10][20]整整一行的空间,所以变量p又称为行指针,因此,在a[10][20]中,数组名称
a,实质上就是“行指针”常量,且a+1将移动整整一行!又名:数组指针常量。

2. 二维数组的引用(行的引用)

char s[10][20];int i;
下标为i的那行首地址的表达(每一行首地址,等价于该行首元素首地址):
&s[0][0]<=>&*(s[0]+0)<=>s[0]+0<=>s[0];
&s[1][0]<=>&*(s[1]+0)<=>s{1]+0<=>s[1];
&s[2][0]<=>&*(s[2]+0)<=>s[2]+0<=>s[2];
...
&s[i][0]<=>&*(s[i]+0)<=>s[i]+0<=>s[i];
...
二维数组的“一维表现形式”正好对应那一行首地址。

3. int a[M][N],i,j;/*设i取值范围:[0,M),j的取值范围:[0,N),a[i][j]有一下几种合法表达式:
1) a[i][j]
2)*(a[i]+j)
3)*(*(a+i)+j)
4)(a[i])[j]
(*(a+i))[j]
4. 嵌套过程如下(基础: a[i]<=>*(a+i) ),
*(a+i)[j]
<=>*((a+i)[j])<=>*(*(a+i +j))<=>*(*(a+i+j)<=>*(*(a+(i+j)))<=>*(a[i+j])<=>*(a[i+j]+0)<=>a[i+j][0]
搜索更多相关主题的帖子: 元素 
2013-08-05 14:56
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
楼主想说什么?


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-05 14:56
快速回复:指针与二维数组的本质
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053575 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved