📄 教学--第十七章 数组(二).htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://d2school.com/bcyl/bhcpp/newls/ls17.htm -->
<HTML><HEAD><TITLE>教学--第十七章 数组(二)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>P {
MARGIN: 1px 2px; LINE-HEIGHT: 150%
}
.节标题 {
FONT-WEIGHT: bold; FONT-SIZE: 12pt
}
TD {
FONT-SIZE: 9pt
}
.tdtitle {
FONT-SIZE: 20pt
}
.celltopline {
BORDER-TOP: #000000 1px solid
}
.menucell {
FONT-SIZE: 10pt
}
A:link {
FONT: 10pt 宋体; COLOR: blue; TEXT-DECORATION: none
}
A:visited {
FONT: 10pt 宋体; COLOR: purple; TEXT-DECORATION: none
}
A:active {
FONT: 10pt 宋体; COLOR: red; TEXT-DECORATION: underline
}
A:hover {
COLOR: blue; TEXT-DECORATION: underline
}
</STYLE>
<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=3>
<CENTER>
<TABLE height=105 cellSpacing=4 cellPadding=4 width=760 border=0>
<TBODY>
<TR>
<TD
style="FONT-SIZE: 10pt; TEXT-INDENT: 20px; LINE-HEIGHT: 150%; FONT-FAMILY: ËÎÌå"
width="100%" height=210>
<H2>第十七章 数组(二)</H2>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.1">17.1
数组与内存</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.1.1">17.1.1
数组的内存结构</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.1.2">17.1.2
数组的内存地址</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.1.3">17.1.3
数组元素的内存地址</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.1.4">17.1.4
数组访问越界</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.2">17.2
二维数组</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.2.1">17.2.1
二维数组基本语法</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.2.2">17.2.2
二维数组初始化</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.2.3">17.2.3
二维数组的内存结构</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.2.4">17.2.4
二维数组的内存地址</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.3">17.3
二维数组实例</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.3.1">17.3.1
用二维数组做字模</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.3.2">17.3.2
二维数组在班级管理程序中应用</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.4">17.4
三维和更多维数组</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.4.1">17.4.1
多维数组的定义与初始化</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.4.2">17.4.2
多维数组的<SPAN lang=zh-cn>示例</SPAN></A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.5">17.5
数组作为函数的参数</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.5.1">17.5.1
数组参数默认是传址方式</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.5.2">17.5.2
可以不指定元素个数</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.5.3">17.5.3
数组作为函数参数的上机实例</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.5.4">17.5.4
二维及更多维数组作为函数参数</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.5.5">17.5.5
函数的返回值类型不能是数组</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.6">17.6
sizeof<SPAN lang=zh-cn>用在数组上</SPAN></A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.6.1">17.6.1
用sizeof自动计算元素个数</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls17.htm#17.6.2">17.6.2
sizeof对数组参数不可用</A>
<P> </P>
<H3><B><A name=17.1>17.1</A> 数组与内存</B></H3>
<P>变量需要占用内存空间,内存空间有地址。<SPAN
lang=zh-cn>不同数据类型的变量,可能占用不同的内存大小及有不同的内存结构。</SPAN></P>
<P><SPAN
lang=zh-cn>以前我们所学都称为“简单数据类型”,如:</SPAN>int,char,float,double,bool<SPAN
lang=zh-cn>。像</SPAN> char,bool,<SPAN
lang=zh-cn>只占用一个字节,所以我们不去管它的的“结构”,其余如</SPAN>int,float,double<SPAN
lang=zh-cn>占用多个字节,但比较简单,适当的时候我们会去探讨4个字节是如何组成一个整数。</SPAN></P>
<P><SPAN
lang=zh-cn>后来我们学习了数组。数组变量占用内存的大小是不定的,因为不同的数组变量除了类型可以不同,还可以拥有不同个数的元素,这两点都影响它的大小。</SPAN></P>
<P> </P>
<P><SPAN
lang=zh-cn>因此,数组是我们第一个要着力研究它的结构的数据类型。和后面我们还要学习的更多数据类型相比,数组的结构还是相当简单的。简单就简单在它的各个元素大小一致,整整齐齐地排列。</SPAN></P>
<P> </P>
<H4><B><A name=17.1.1>17.1.1</A> 数组的内存结构</B></H4>
<P>变量需要占用内存空间,内存空间有地址。</P>
<P> </P>
<P>声明一个整型变量</P>
<P> </P>
<P><SPAN lang=en-us>int a;</SPAN></P>
<P> </P>
<P>系统会为该变量申请相应大小的空间,一个int类型的变量时,需要占用4个字节的空间,如下图:</P>
<P><IMG height=125 src="教学--第十七章 数组(二).files/ls001.gif" width=385
border=0></P>
<P>也就是说,一个 int 类型的变量,它的内存结构就是 “4个连续的字节”。</P>
<P> </P>
<P>当我们声明一个数组:<SPAN lang=en-us>int arr[100];</SPAN></P>
<P> </P>
<P>我们可以想像,<SPAN lang=en-us>arr</SPAN>数组在内存中占用了100 <SPAN lang=en-us>*
sizeof(int)</SPAN> 个字节。</P>
<P> </P>
<P>现在请大家打开<SPAN lang=en-us>Windows</SPAN>的画笔程序,家画一个数组的内存结构示意图。</P>
<P> </P>
<H4><B><A name=17.1.2>17.1.2</A> 数组的内存地址</B></H4>
<P> </P>
<P>一个<SPAN
lang=en-us>int</SPAN>类型变量,占用4个字节的内存,其中第一个字节的位置,我们称为该变量的内存地址。</P>
<P>同样,一个数组变量,占用一段连续的内存,其中第一个字节的位置,我们称为该数组变量的内存地址。</P>
<P> </P>
<P>还记得 <SPAN lang=en-us>& </SPAN>这个符号吗?通过它我们可以得到指定变量的内存地址。</P>
<P> </P>
<P><SPAN lang=en-us>int a;</SPAN></P>
<P><SPAN lang=en-us>cout << &a << endl;</SPAN></P>
<P> </P>
<P><SPAN lang=en-us>& </SPAN>称为“取址符”。如果你有点记不清,可以查看以前的课程。</P>
<P> </P>
<P>本章第一个需要你特别注意的内容来了:</P>
<P>查看数组变量的地址,不需要使用<SPAN lang=en-us> &
</SPAN>。下面的话是一个原因也是一个结论,你必须记住。</P>
<P> </P>
<P><FONT
color=#ff0000><B>C,C++语言中,对数组变量的操作,就相当于直接对该数组变量的地址的操作。</B></FONT></P>
<P> </P>
<P>因此,想要查看一个数组变量的地址,代码为:</P>
<P> </P>
<P><SPAN lang=en-us>int arr[10];</SPAN></P>
<P><SPAN lang=en-us>cout << arr << endl;
//</SPAN>注意,<SPAN lang=en-us>arr</SPAN>之前无需<SPAN lang=en-us> &
</SPAN>。</P>
<P> </P>
<P>现在,请大家打开<SPAN lang=en-us>CB,</SPAN>然后将上面代码写成完整的一个控制台程序,看看输出结果。</P>
<P> </P>
<H4><B><A name=17.1.3>17.1.3</A> 数组元素的内存地址</B></H4>
<P> </P>
<P>一个数组变量包含多个连续的元素,每一个元素都是一个普通变量。因此,对就像对待普通变量一样可以通过<SPAN
lang=en-us>&</SPAN>来取得地址:</P>
<P> </P>
<P><SPAN lang=en-us>//</SPAN>查看数组中第一个元素的地址:</P>
<P><SPAN lang=en-us>int arr[10];</SPAN></P>
<P><SPAN lang=en-us>cout << &arr[0] << endl;</SPAN></P>
<P> </P>
<P><B>例一:</B></P>
<P>现在,请大家在CB里继续上一小节的代码,要求:用一个<SPAN lang=en-us>for</SPAN>循环,输出数组<SPAN
lang=en-us>arr</SPAN>中每一个元素的地址。</P>
<P>如果你已完成,现在来看我的答案。</P>
<P> </P>
<P><SPAN lang=en-us>#include <iostream.h></SPAN></P>
<P><SPAN lang=en-us>...</SPAN></P>
<P><SPAN lang=en-us>int arr[10];</SPAN></P>
<P> </P>
<P><SPAN lang=en-us>for(int i=0; i<10; i++)</SPAN></P>
<P><SPAN lang=en-us> cout << &arr[i] <<
endl;</SPAN></P>
<P><SPAN lang=en-us>...</SPAN></P>
<P><SPAN lang=en-us>cin.get();</SPAN></P>
<P> </P>
<P>我们把它和前面输出数组地址的例子结合起来,然后观察输出结果。</P>
<P> </P>
<P><SPAN lang=en-us>...</SPAN></P>
<P><SPAN lang=en-us>int arr[10];</SPAN></P>
<P> </P>
<P><SPAN lang=en-us>//</SPAN>输出数组的地址:</P>
<P><SPAN lang=en-us>cout << "</SPAN>数组<SPAN
lang=en-us>arr</SPAN>的地址:<SPAN lang=en-us> " << arr <<
endl;</SPAN></P>
<P> </P>
<P><SPAN lang=en-us>//</SPAN>输出每个元素的地址:</P>
<P><SPAN lang=en-us>for(int i=0; i<10; i++)</SPAN></P>
<P><SPAN lang=en-us> cout << "</SPAN>元素<SPAN
lang=en-us>arr[" <<i <<"]</SPAN>的地址:<SPAN lang=en-us>"
<< &arr[i] << endl;</SPAN></P>
<P> </P>
<P><SPAN lang=en-us>...</SPAN></P>
<P> </P>
<P>输出结果:</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -