5.2.1 2维
![](/icons/15705shuzu.gif)
![](/icons/15705de.gif)
![](/icons/15705yi.gif)
般形式
C语言允许使用多维
![](/icons/15705shuzu.gif)
![](/icons/15705dou.gif)
最简单
![](/icons/15705de.gif)
多维
![](/icons/15705shuzu.gif)
是 2维
![](/icons/15705shuzu.gif)
![](/icons/15705dou2.gif)
实际上
![](/icons/15705dou.gif)
2维
![](/icons/15705shuzu.gif)
是以
![](/icons/15705yi.gif)
维
![](/icons/15705shuzu.gif)
为元素构成
![](/icons/15705de.gif)
![](/icons/15705shuzu.gif)
![](/icons/15705dou.gif)
要将d介绍说明成大小为(10
![](/icons/15705dou.gif)
20)
![](/icons/15705de.gif)
2维整型
![](/icons/15705shuzu.gif)
![](/icons/15705dou.gif)
可以写成:
![](/icons/15705int.gif)
d[10][20]
请留心上面
![](/icons/15705de.gif)
介绍说明语句
![](/icons/15705dou.gif)
C不像其它大多数计算机语言那样使用逗号区分下标
![](/icons/15705dou.gif)
而是用方
括号将各维下标括起
![](/icons/15705dou.gif)
并且
![](/icons/15705dou.gif)
![](/icons/15705shuzu.gif)
![](/icons/15705de.gif)
2维下标均从0计算
![](/icons/15705dou2.gif)
和此相似
![](/icons/15705dou.gif)
要存取
![](/icons/15705shuzu.gif)
d中下标为(3
![](/icons/15705dou.gif)
5)
![](/icons/15705de.gif)
元素可以写成:
d[3][5]
在例5-3中
![](/icons/15705dou.gif)
整数1到12被装入
![](/icons/15705yi.gif)
个 2维
![](/icons/15705shuzu.gif)
![](/icons/15705dou2.gif)
[例5-3]
![](/icons/15705main.gif)
![](/icons/15705kh.gif)
{
![](/icons/15705int.gif)
t
![](/icons/15705dou.gif)
i
![](/icons/15705dou.gif)
num[3][4]
for(t=0;t<3;t)
for(i=0;i<4;i)
num[t][i]=(t*4)i1;
}
在此例中
![](/icons/15705dou.gif)
num[0][0]
![](/icons/15705de.gif)
值为1
![](/icons/15705dou.gif)
num[0][2]
![](/icons/15705de.gif)
值为3
![](/icons/15705dou.gif)
......
![](/icons/15705dou.gif)
num[2][3]
![](/icons/15705de.gif)
值为12
![](/icons/15705dou2.gif)
可以将
该
![](/icons/15705shuzu.gif)
想象为如下表格:
2维
![](/icons/15705shuzu.gif)
以行—列矩阵
![](/icons/15705de.gif)
形式存储
![](/icons/15705dou2.gif)
第
![](/icons/15705yi.gif)
个下标代表行
![](/icons/15705dou.gif)
第 2个下标代表列
![](/icons/15705dou.gif)
这意味着
按照在内存中
![](/icons/15705de.gif)
实际存储顺序访问
![](/icons/15705shuzu.gif)
元素时
![](/icons/15705dou.gif)
右边
![](/icons/15705de.gif)
下标比左边
![](/icons/15705de.gif)
下标
![](/icons/15705de.gif)
变化快
![](/icons/15705yi.gif)
些
![](/icons/15705dou2.gif)
图
5-2是
![](/icons/15705yi.gif)
个 2维
![](/icons/15705shuzu.gif)
在内存中
![](/icons/15705de.gif)
情形
![](/icons/15705dou.gif)
实际上
![](/icons/15705dou.gif)
第
![](/icons/15705yi.gif)
下标可以认为是行
![](/icons/15705de.gif)
指针
![](/icons/15705dou2.gif)
记住
![](/icons/15705dou.gif)
![](/icons/15705yi.gif)
旦
![](/icons/15705shuzu.gif)
被证明
![](/icons/15705dou.gif)
所有
![](/icons/15705de.gif)
![](/icons/15705shuzu.gif)
元素都将分配相应
![](/icons/15705de.gif)
存储空间
![](/icons/15705dou2.gif)
对于 2维
![](/icons/15705shuzu.gif)
可用
下列公式计算所需
![](/icons/15705de.gif)
内存字节数:
行数×列数×类型字节数=总字节数
因而
![](/icons/15705dou.gif)
假定为双字节整型
![](/icons/15705dou.gif)
大小为(10
![](/icons/15705dou.gif)
5)
![](/icons/15705de.gif)
整型
![](/icons/15705shuzu.gif)
将需要:10×5×2=100字节
当 2维
![](/icons/15705shuzu.gif)
用作
![](/icons/15705hanshu.gif)
![](/icons/15705de.gif)
参数时
![](/icons/15705dou.gif)
实际上传递
![](/icons/15705de.gif)
是第
![](/icons/15705yi.gif)
个元素(如[0][0])
![](/icons/15705de.gif)
指针
![](/icons/15705dou2.gif)
不过该
![](/icons/15705hanshu.gif)
至少得定义第 2维
![](/icons/15705de.gif)
长度
![](/icons/15705dou.gif)
这是
![](/icons/15705yinwei.gif)
C编译
![](/icons/15705chengxu.gif)
若要使得对
![](/icons/15705shuzu.gif)
![](/icons/15705de.gif)
检索正确无误
![](/icons/15705dou.gif)
就需要
知道每
![](/icons/15705yi.gif)
行
![](/icons/15705de.gif)
长度
![](/icons/15705dou2.gif)
例如
![](/icons/15705dou.gif)
将要接收大小为(10
![](/icons/15705dou.gif)
10)
![](/icons/15705de.gif)
2维
![](/icons/15705shuzu.gif)
![](/icons/15705de.gif)
![](/icons/15705hanshu.gif)
![](/icons/15705dou.gif)
可以介绍说明如下:
func1(x)
![](/icons/15705int.gif)
x
![](/icons/15705zhk2.gif)
[10]
{
.
.
.
}
第
![](/icons/15705yi.gif)
维
![](/icons/15705de.gif)
长度也可指明
![](/icons/15705dou.gif)
但没有必要
![](/icons/15705dou2.gif)
C编译
![](/icons/15705chengxu.gif)
对
![](/icons/15705hanshu.gif)
中
![](/icons/15705de.gif)
如下语句:
X[2][4]
处理时
![](/icons/15705dou.gif)
需要知道 2维
![](/icons/15705de.gif)
长度
![](/icons/15705dou2.gif)
若行长度没定义
![](/icons/15705dou.gif)
那么它就不可能知道第 3行从哪儿开
始
![](/icons/15705dou2.gif)
[例5-4]用
![](/icons/15705yi.gif)
个 2维
![](/icons/15705shuzu.gif)
存放某
![](/icons/15705yi.gif)
教师任教
![](/icons/15705de.gif)
各班学生
![](/icons/15705de.gif)
分数
![](/icons/15705dou2.gif)
假定教师有 3个班
![](/icons/15705dou.gif)
每班
最多有 3十名学生
![](/icons/15705dou2.gif)
注意各
![](/icons/15705hanshu.gif)
存取
![](/icons/15705shuzu.gif)
![](/icons/15705de.gif)
思路方法
![](/icons/15705dou2.gif)
#
![](/icons/15705define.gif)
![](/icons/15705class.gif)
es3
#
![](/icons/15705define.gif)
grades30
#
![](/icons/15705include.gif)
<stdio.h>
![](/icons/15705main.gif)
![](/icons/15705kh.gif)
{
voidenter_grades
![](/icons/15705kh.gif)
;
voiddisp_grades
![](/icons/15705kh.gif)
;
![](/icons/15705int.gif)
get_grade
![](/icons/15705kh.gif)
;
![](/icons/15705int.gif)
a[
![](/icons/15705class.gif)
es][grades];定/*义 2维
![](/icons/15705shuzu.gif)
![](/icons/15705dou.gif)
每行存放
![](/icons/15705yi.gif)
个班学生成绩*/
charch;
for(;;)
{
do{/*菜单显示*/
pr
![](/icons/15705int.gif)
f("(E)ntergrades\\n");
pr
![](/icons/15705int.gif)
f("(R)eportgrades\\n");
pr
![](/icons/15705int.gif)
f("(Q)uit\\n");
ch=toupper(getchar
![](/icons/15705kh.gif)
);/将*键盘输入
![](/icons/15705zifu.gif)
转换为大写*/
}while(ch!=E&&ch!=R&&ch!=Q);
switch(ch)
{
![](/icons/15705case.gif)
E:
enter_grades
![](/icons/15705kh.gif)
;
![](/icons/15705break.gif)
;
![](/icons/15705case.gif)
R:
disp_grades(grade);
![](/icons/15705break.gif)
;
![](/icons/15705case.gif)
Q:
exit(0);
}
}
}
voidenter_grades(a)
![](/icons/15705int.gif)
a
![](/icons/15705zhk2.gif)
[grades];
{
![](/icons/15705int.gif)
t,i;
for(t=0;t<
![](/icons/15705class.gif)
es;t)
{
pr
![](/icons/15705int.gif)
f("
![](/icons/15705class.gif)
#%d:\\n",t1);
for(i=0;i<grades;i)
a[t][i]=get_grade(i);
}
}
![](/icons/15705int.gif)
get_grades(num)
![](/icons/15705int.gif)
num;
{
chars[80];
pr
![](/icons/15705int.gif)
f("entergradeforstudent#%d:
![](/icons/15705dou.gif)
\\nn"um1);
gets(s);/*输入成绩*/
![](/icons/15705return.gif)
(atoi(s));
}
voiddisp_grades(g)/*显示学生成绩*/
![](/icons/15705int.gif)
g
![](/icons/15705zhk2.gif)
[grades];
{
![](/icons/15705int.gif)
t
![](/icons/15705dou.gif)
i;
for(t=0;t<
![](/icons/15705class.gif)
es;t){
pr
![](/icons/15705int.gif)
f("
![](/icons/15705class.gif)
#%d:\\n
![](/icons/15705dou.gif)
"t1);
for(i=0;i<grades;i)
pr
![](/icons/15705int.gif)
f("gradeforstudent#%dis%d\\
![](/icons/15705dou.gif)
ni"1
![](/icons/15705dou.gif)
g[t][i]);
}
}
我们将实际问题简化为共有2个班
![](/icons/15705dou.gif)
每班两个学生
![](/icons/15705dou.gif)
即将
![](/icons/15705chengxu.gif)
中
![](/icons/15705de.gif)
常量定义修改如下:
#
![](/icons/15705define.gif)
![](/icons/15705class.gif)
es2
#
![](/icons/15705define.gif)
grades2
运行
![](/icons/15705chengxu.gif)
:
RUN
(E)ntergrades
(R)eportgrades
(Q)uit:e
![](/icons/15705class.gif)
#1:
entergradeforstudent#17:8
entergradeforstudent#289:¿
![](/icons/15705class.gif)
#2
entergradeforstudent#19:8¿
entergradeforstudent#29:0¿
(E)ntergrades
(R)eportgrades
(Q)uit:r¿
![](/icons/15705class.gif)
#1
gradeforstudent#1is78
gradeforstudent#2is89
![](/icons/15705class.gif)
#2
gradeforstudent#1is98
gradeforstudent#2is90
(E)ntergrades
(R)eportgrades
(Q)uit:q
运行
![](/icons/15705chengxu.gif)
![](/icons/15705dou.gif)
我们首先看到
![](/icons/15705yi.gif)
个菜单
![](/icons/15705dou.gif)
选择“e”输入成绩
![](/icons/15705dou.gif)
选择“r”显示成绩
![](/icons/15705dou.gif)
选择“q”
退出
![](/icons/15705dou2.gif)
atoi
![](/icons/15705kh.gif)
![](/icons/15705hanshu.gif)
用于将实参
![](/icons/15705zifu.gif)
串转换为整型
![](/icons/15705dou2.gif)
5.2.2
![](/icons/15705zifu.gif)
串
![](/icons/15705shuzu.gif)
![](/icons/15705chengxu.gif)
设计中经常要用到
![](/icons/15705zifu.gif)
串
![](/icons/15705shuzu.gif)
![](/icons/15705dou2.gif)
例如
![](/icons/15705dou.gif)
数据库
![](/icons/15705de.gif)
输入处理
![](/icons/15705chengxu.gif)
就要将用户输入
![](/icons/15705de.gif)
命
令和存在
![](/icons/15705zifu.gif)
串
![](/icons/15705shuzu.gif)
中
![](/icons/15705de.gif)
有效命令相比较
![](/icons/15705dou.gif)
检验其有效性
![](/icons/15705dou2.gif)
可用 2维
![](/icons/15705zifu.gif)
![](/icons/15705shuzu.gif)
![](/icons/15705de.gif)
形式建立字
符串
![](/icons/15705shuzu.gif)
![](/icons/15705dou.gif)
左下标决定
![](/icons/15705zifu.gif)
串
![](/icons/15705de.gif)
个数
![](/icons/15705dou.gif)
右下标介绍说明串
![](/icons/15705de.gif)
最大长度
![](/icons/15705dou2.gif)
例如
![](/icons/15705dou.gif)
下面
![](/icons/15705de.gif)
语句定义了
![](/icons/15705yi.gif)
个
![](/icons/15705zifu.gif)
串
![](/icons/15705shuzu.gif)
![](/icons/15705dou.gif)
它可存放30个
![](/icons/15705zifu.gif)
串
![](/icons/15705dou.gif)
串
![](/icons/15705de.gif)
最大长度为80个
![](/icons/15705zifu.gif)
:
charstr_
![](/icons/15705<img src=)
.gif' />[30][80];
要访问单独
![](/icons/15705de.gif)
![](/icons/15705zifu.gif)
串是很容易
![](/icons/15705de.gif)
![](/icons/15705dou.gif)
只需标明左下标就可以了
![](/icons/15705dou2.gif)
例如
![](/icons/15705dou.gif)
下面
![](/icons/15705de.gif)
语句以
![](/icons/15705shuzu.gif)
str_
![](/icons/15705<img src=)
.gif' />中
![](/icons/15705de.gif)
第 3个
![](/icons/15705zifu.gif)
串为参数
![](/icons/15705diaoyong.gif)
![](/icons/15705hanshu.gif)
gets
![](/icons/15705kh.gif)
![](/icons/15705dou2.gif)
gets(str_
![](/icons/15705<img src=)
.gif' />[2]);
该语句在功能上等价于:
gets(&str_
![](/icons/15705<img src=)
.gif' />[2][0]);
但第
![](/icons/15705yi.gif)
种形式在专业
![](/icons/15705chengxu.gif)
员编制
延伸阅读
最新评论