⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第21章 指针三 实例演练与提高.htm

📁 用非常通俗的语言介绍了C++和C
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0049)http://www.d2school.com/bcyl/bhcpp/newls/ls21.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
}
#glowtext {
	FONT-SIZE: 10pt; FILTER: glow(color=red,strength=1); WIDTH: 100%
}
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.2769" 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: &Euml;&Icirc;&Igrave;&aring;" 
    width="100%" height=210>
      <H2>第二十一章 指针 三 <SPAN lang=zh-cn>实例演练与提高</SPAN></H2>
      <P>  
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#21.1">21.1 
      <SPAN lang=zh-cn>简单变量、数组、指针</SPAN></A> 
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.2 
      小王成绩管理系统V2.0 的问题</A> 
      <P>&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.2.1 
      软件升级历史</A> 
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.3 
      指针的最常用用法</A> 
      <P>&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.3.1 
      分配内存</A> 
      <P>&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.3.2 
      访问指针指向的内存</A> 
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.4 
      小王成绩管理系统 V3.0</A> 
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.5 
      字符串指针</A> 
      <P>&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.5.1 
      为字符串分配指定大小的空间</A> 
      <P>&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.5.2 
      字符串常用函数</A> 
      <P>&nbsp;&nbsp;&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.5.2.1 
      字符串比较</A> 
      <P>&nbsp;&nbsp;&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.5.2.2 
      字符串复制</A> 
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.6 
      指针数组</A> 
      <P>&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.6.1 
      什么叫“指针数组”?</A> 
      <P>&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.6.2 
      指针数组实例一</A> 
      <P>&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.6.3 
      指针数组实例二</A> 
      <P>&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls21.htm#20.1.1">21.6.4 
      字符串指针数组&nbsp; </A>
      <P>
      <P>  
      <H3><B><A name=21.1>21.1</A> 简单变量、数组、指针</B></H3>
      <P>学习的知识点越来越多了…… 
      <P>刚开始会觉得很兴奋啊,学得越多越好嘛。可慢慢的就会感到压力了,各种知识点在头脑里混在一起,每个都变得模糊了。 
      <P>其实,每个知识点都有它存在,或出现的理由,只要我们多做对比,就会发现学习的知识点越多,反倒越容易理解每个知识点本质。 
      <P>比如说,简单变量、数组、指针,三者都是C++中用于表达数据的工具,但在表达能力上,又各有不同。 
      <P>如果用建筑上的房间来比喻: 
      <P>  
      <P>简单变量是一间房屋。优点是占用空间少,建筑时间短,缺点是一间房子只适于住一个人; 
      <P>数组是房间数固定的一排房子,每个房子里头同样只住一人,但由于它有多间,所以适于多人居住,优点是可以统一管理多人,缺点一来是占用空间大,二来房间数一旦确定,就不能改变了。先头盖了10间,如果如果来了11个人,就有一人住不下,如果来了9个人,就有一间浪费。 

      <P>指针呢……它不是实际房子,而是设计纸上的房子。因此,它首先有一个特点:如果你想让指针存储数据,那一定得先为它分配内存。这就像光有一张设计蓝图是解决不了四代同堂的问题的,重要的是你还得根据这张蓝图,去找块地皮盖好房子。指针的优点是可以临时决定要盖多少间房子。 

      <P>下面我们回顾一个例子,以理解三者的不同用处。 
      <P>  
      <H3><B><A name=21.2>21.2</A> 小王成绩管理系统V2.0的问题</B></H3>
      <P>先回顾一下该程序的升级过程,今天我们将对它做出两种不同方向的改进。 
      <H4><A name=21.2.1>21.2.1</A> 软件升级历史</H4>
      <P><SPAN lang=en-us>V1.0 : </SPAN>本版成绩管理系统实现让计算机自动统计6个班级的成绩总分和平均分。 
      <P><SPAN lang=en-us>V2.0 : 
      </SPAN>经过改进,本版可以实现多达5000个学生的成绩进行求总分和平均分,并且可以支持用户输入序号,查询任意一个学生的成绩! 
      <P>  
      <P>在第一版,小王正在学习“循环流程”。通过在每次循环中,让用户输入一个成绩,然后保存在一个简单变量里,并累加到另一个简单变量,最终计算出总分和平均分。 

      <P>第二版,由于段长要求不仅可以统计5000个学员的成绩,而且应实现成绩查询功能,这就要求程序必须同时记下5000个学生成绩。小王先是想用5000个简单变量来记下成绩——这显然太不实际了,后来学到数组,用数组轻松解决了这个问题,因为数组正是为“同时存储多个相同类型的变量”这一问题来设计的。 

      <P>然而,第二版存在的不足也是显然易见的。那就是,它固定只能处理最多5000个学员的成绩。假想,这个软件要推广到全市300个学校,每个学校的学生总数都是不一样的,更惨的是每一年,一个学校的学生个数总是会有变化。难道就让我们的王老师时不时地改它的程序? 

      <P>在没有指针时,惟一办法就是,浪费一点,比如定义数组元素个数为1万。目的是宁可浪费一点,也尽量不要出现不够的情况。显然,本办法只能算是一个无奈之举。难道就没有一个办法,即可以适应某个山区小学只有30名学员也情况,又可以轻松对付某大学高达2万名学员的情况? 

      <P>  
      <P>锣声响起,锵锵锵……指针出场了。 
      <P>  
      <P>指针是如何完成这一历史使命?带着问题,我们来学习下面的内容。 
      <P>我们会在学习新内容之中,同时有选择地做一些旧知识点的复习工作。但如果你仍看不懂下面的一些代码,那得全面复习前两章的指针内容;或者,如果你连<SPAN 
      lang=en-us>for</SPAN>都有些陌生,那你得重温一下小王成绩管理系统的前两个版本。 
      <P>  
      <H3><A name=21.3><B>21</B>.3</A> 指针的最常用用法</H3>
      <H4><A name=21.3.1>21.3.1</A><SPAN lang=en-us> </SPAN>分配内存</H4>
      <P>如何为指针分配和释放内存,上一章的内容中讲到了C++独用的<SPAN lang=en-us>new/delete</SPAN>、<SPAN 
      lang=en-us>new[] / delete[] </SPAN>和<SPAN lang=en-us> </SPAN>C 使用的<SPAN 
      lang=en-us>malloc, realloc/ free</SPAN> 方法。如果你忘了,请先复习。我们这里使用<SPAN 
      lang=en-us>C++</SPAN>的方法演练。 
      <P>  
      <P><SPAN lang=en-us>new </SPAN>只能为我们分配一个简单变量的内存,就是说<SPAN 
      lang=en-us>new</SPAN>只盖了一间房子。<SPAN lang=en-us>new [] </SPAN>才能为我们盖出一排的房子。 
      <P>  
      <P>例子: 
      <P><SPAN lang=en-us>int* p; //</SPAN>定义一个整型指针 
      <P>  
      <P><SPAN lang=en-us>p = new [10];&nbsp; //new [] </SPAN>为我们分配出10个<SPAN 
      lang=en-us>int</SPAN>大小的内存。(盖了10间房,每间住一个整数<SPAN lang=en-us>)</SPAN> 
      <P>  
      <H4><A name=21.3.2>21.3.2</A> 访问指针指向的内存</H4>
      <P>前面:<SPAN lang=en-us>p = new [10]</SPAN>; 为我们分配了10个<SPAN 
      lang=en-us>int</SPAN>,那么,我们该如何设置和访问这10个整数的值呢? 
      <P>这一点完全和数组一致,我们来看数组是如何操作: 
      <P>  
      <P><B><FONT color=#008000><SPAN lang=en-us>int a[10]; 
      //</SPAN>以数组方式来定义10个<SPAN lang=en-us>int</SPAN></FONT></B> 
      <P>  
      <P><B><FONT color=#008000><SPAN 
      lang=en-us>//</SPAN>让第1个整数的值为100:</FONT></B> 
      <P><B><FONT color=#008000><SPAN lang=en-us>a[0] = 100;</SPAN></FONT></B> 
      <P><B><FONT color=#008000><SPAN lang=en-us>//</SPAN>让第<SPAN 
      lang=en-us>2</SPAN>个整数的值为<SPAN lang=en-us>80</SPAN>:</FONT></B> 
      <P><B><FONT color=#008000><SPAN lang=en-us>a[1] =</SPAN> <SPAN 
      lang=en-us>80;</SPAN></FONT></B> 
      <P>  
      <P>指针的操作方式如下: 
      <P>  
      <P><B><FONT color=#ff00ff><SPAN lang=en-us>int* p = new int[10]; 
      //</SPAN>定义1个整型指针,并为它分配出10个<SPAN lang=en-us>int</SPAN>的空间</FONT></B> 
      <P>  
      <P><B><FONT color=#ff00ff><SPAN 
      lang=en-us>//</SPAN>让第1个整数的值为100:</FONT></B> 
      <P><B><FONT color=#ff00ff><SPAN lang=en-us>p[0] = 100;</SPAN></FONT></B> 
      <P><B><FONT color=#ff00ff><SPAN lang=en-us>//</SPAN>让第<SPAN 
      lang=en-us>2</SPAN>个整数的值为<SPAN lang=en-us>80</SPAN>:</FONT></B> 
      <P><B><FONT color=#ff00ff><SPAN lang=en-us>p[1] =</SPAN> <SPAN 
      lang=en-us>80;</SPAN></FONT></B> 
      <P>  
      <P>对比以上两段代码,你可以发现,对指针分配出的元素操作,完全和对数组的元素操作一致。不过,指针还有另一种对其元素的操作方法: 
      <P>  
      <P><B><SPAN lang=en-us>int* p = new int[10]; 
      //</SPAN>定义1个整型指针,并为它分配出10个<SPAN lang=en-us>int</SPAN>的空间</B> 
      <P>  
      <P><B><SPAN lang=en-us>//</SPAN>让第1个整数的值为100:</B> 
      <P><B><FONT color=#ff0000>*(<SPAN lang=en-us>p</SPAN>+0)</FONT><SPAN 
      lang=en-us> = 100;</SPAN></B> 
      <P><B><SPAN lang=en-us>//</SPAN>让第<SPAN lang=en-us>2</SPAN>个整数的值为<SPAN 
      lang=en-us>80</SPAN>:</B> 
      <P><B><FONT color=#ff0000>*(<SPAN lang=en-us>p</SPAN>+<SPAN 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -