友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
C语言设计-第14部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
设数组 a 的首地址为 1000,各下标变量的首地址及其值如图所示。
谭浩强 C 语言程序设计 2001 年 5 月 1 日
前面介绍过,C语言允许把一个二维数组分解为多个一维数组来处理。因此数组 a 可分
解为三个一维数组,即 a'0',a'1',a'2'。每一个一维数组又含有四个元素。
例如 a'0'数组,含有 a'0''0',a'0''1',a'0''2',a'0''3'四个元素。
数组及数组元素的地址表示如下:
从二维数组的角度来看,a 是二维数组名,a 代表整个二维数组的首地址,也是二维数
组 0 行的首地址,等于 1000。a+1 代表第一行的首地址,等于 1008。如图:
a'0'是第一个一维数组的数组名和首地址,因此也为 1000。*(a+0)或*a 是与 a'0'等效
的, 它表示一维数组 a'0'0 号元素的首地址,也为 1000。&a'0''0'是二维数组 a 的 0 行 0
列元素首地址,同样是 1000。因此,a,a'0',*(a+0),*a,&a'0''0'是相等的。
同理,a+1 是二维数组 1 行的首地址,等于 1008。a'1'是第二个一维数组的数组名和首
地址,因此也为 1008。&a'1''0'是二维数组 a 的 1 行 0 列元素地址,也是 1008。因此
a+1;a'1';*(a+1);&a'1''0'是等同的。
由此可得出:a+i,a'i',*(a+i),&a'i''0'是等同的。
此外,&a'i'和 a'i'也是等同的。因为在二维数组中不能把&a'i'理解为元素 a'i'的地
址,不存在元素 a'i'。C语言规定,它是一种地址计算方法,表示数组 a 第 i 行首地址。
由此,我们得出:a'i',&a'i',*(a+i)和 a+i 也都是等同的。
另外,a'0'也可以看成是 a'0'+0,是一维数组 a'0'的 0 号元素的首地址,而 a'0'+1
则是 a'0'的 1 号元素首地址,由此可得出 a'i'+j 则是一维数组 a'i'的 j 号元素首地址,它
等于&a'i''j'。
谭浩强 C 语言程序设计 2001 年 5 月 1 日
由 a'i'=*(a+i)得 a'i'+j=*(a+i)+j。由于*(a+i)+j 是二维数组 a 的 i 行 j 列元素的首
地址,所以,该元素的值等于*(*(a+i)+j)。
【例 10。22】
main(){
int a'3''4'={0;1;2;3;4;5;6;7;8;9;10;11};
printf(〃%d;〃;a);
printf(〃%d;〃;*a);
printf(〃%d;〃;a'0');
printf(〃%d;〃;&a'0');
printf(〃%dn〃;&a'0''0');
printf(〃%d;〃;a+1);
printf(〃%d;〃;*(a+1));
printf(〃%d;〃;a'1');
printf(〃%d;〃;&a'1');
printf(〃%dn〃;&a'1''0');
printf(〃%d;〃;a+2);
printf(〃%d;〃;*(a+2));
printf(〃%d;〃;a'2');
printf(〃%d;〃;&a'2');
printf(〃%dn〃;&a'2''0');
printf(〃%d;〃;a'1'+1);
printf(〃%dn〃;*(a+1)+1);
printf(〃%d;%dn〃;*(a'1'+1);*(*(a+1)+1));
}
2。 指向多维数组的指针变量
把二维数组 a 分解为一维数组 a'0';a'1';a'2'之后,设 p 为指向二维数组的指针变量。
可定义为:
int (*p)'4'
它表示 p 是一个指针变量,它指向包含 4 个元素的一维数组。若指向第一个一维数组
a'0',其值等于 a;a'0',或&a'0''0'等。而 p+i 则指向一维数组 a'i'。从前面的分析可得
出*(p+i)+j 是二维数组 i 行 j 列的元素的地址,而*(*(p+i)+j)则是 i 行 j 列元素的值。
二维数组指针变量说明的一般形式为:
谭浩强 C 语言程序设计 2001 年 5 月 1 日
类型说明符 (*指针变量名)'长度'
其中“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示
二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。应注意“(*指
针变量名)”两边的括号不可少,如缺少括号则表示是指针数组(本章后面介绍),意义就完
全不同了。
【例 10。23】
main(){
int a'3''4'={0;1;2;3;4;5;6;7;8;9;10;11};
int(*p)'4';
int i;j;
p=a;
for(i=0;i
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!