📄 第13章 函数(二).htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0049)http://www.d2school.com/bcyl/bhcpp/newls/ls13.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>
<CENTER>
<TABLE height=154 cellSpacing=4 cellPadding=4 width=760 border=0>
<TBODY>
<TR>
<TD
style="FONT-SIZE: 10pt; MARGIN-LEFT: 12px; TEXT-INDENT: 20px; LINE-HEIGHT: 150%; MARGIN-RIGHT: 12px; FONT-FAMILY: 宋体"
width="100%" height=148>
<H2>第十三章 函数(二)</H2>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.1">13.1
函数的返回值</A></P>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.1.1">13.1.1
函数的返回类型</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.1.2">13.1.2
return 语句</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.1.3">13.1.3
跟踪函数</A>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.2">13.2
函数的参数</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.2.1">13.2.1
形参和实参</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.2.2">13.2.2
参数的传递方式</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.2.2.1">13.2.2.1
传值方式</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.2.2.2">13.2.2.2
传址方式</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.2.3">13.2.3
参数的传递过程(选修)</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.2.4">13.2.4
参数默认值</A>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.3">13.3
函数重载</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.3.1">13.3.1
重载的目的</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.3.2">13.3.2
函数重载的规则</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.3.3">13.3.3
参数默认值与函数重载的实例</A>
<P><A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.4">13.4 inline
函数</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.4.1">13.4.1
什么叫inline函数?</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.4.2">13.4.2
inline函数的规则</A>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.5">13.5
函数的递归调用(选修)</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.5.1">13.5.1
递归和递归的危险</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.5.2">13.5.2
递归调用背后隐藏的循环流程</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.5.3">13.5.3
参数在递归调用过程中的变化</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.5.4">13.5.4
一个安全的递归调用函数实例</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.5.5">13.5.5
递归函数的返回</A>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls13.htm#13.6">13.6
小结</A> </P>
<P> </P>
<P>上一章我们讲了函数最基本的知识,即如何函数调用一个函数,和如何写一个函数。这一章我们的任务是:重点加深学习函数的返回值和函数的参数;另外我们还将选修函数的递归调用。</P>
<P> </P>
<P>通过对这两个知识点的深化学习,我们对函数的理解会更深。</P>
<P> </P>
<H3><A name=13.1>13.1</A> 函数的返回值</H3>
<P>有关函数的返回值,将涉及到函数的这些知识点:函数的类型,return,及如何得到函数的返回类型。</P>
<P> </P>
<H4><A name=13.1.1>13.1.1</A> 函数的返回类型</H4>
<P> </P>
<P>函数的类型,其实是函数返回值的类型。请看例子:</P>
<P> </P>
<P>//实现两个整数相加的函数:</P>
<P><FONT color=#ff0000>int </FONT>AddTwoNum(int a,int b)</P>
<P>{</P>
<P> return a + b;</P>
<P>}</P>
<P> </P>
<P>上面标为红色的int即为函数
AddTwoNum的类型,普通的说法是“函数AddTwoNum的返回类型是整型”。也就是说函数AddTwoNum只能返回整型的值。我们看代码:</P>
<P>return a + b;</P>
<P>返回了a + b,其中a和b都是整型,二者相加也是整型。所以这个函数的返回类型正确。下面看一个错误的实例:</P>
<P> </P>
<P>int AddTwoNum(<FONT color=#ff0000>float</FONT> a,<FONT
color=#ff0000>float</FONT> b)</P>
<P>{</P>
<P> return a + b;</P>
<P>}</P>
<P> </P>
<P>尽管从逻辑上看,这段代码也没有错误,同样可以实现两个数相加,但我们认为它是有错的代码。因为函数AddTwoNum()的类型仍然规定为int类型,但函数体中的代码,却试图返回的却是float类型。为什么说返回的是float类型呢?因为请注意,现在a,b都是float类型了。</P>
<P>不仅这段代码有错,下面的代码也同样错误:</P>
<P> </P>
<P>int AddTwoNum(int a, int b)</P>
<P>{</P>
<P> float c = a + b;</P>
<P> return c;</P>
<P>}<BR></P>
<P>要注意,写类似上面的代码,编译器会放行,并不认为错误。那是因为编译器将一个float类型强制转换为int类型,这就会造成精度丢失。比如调用:AddTwoNum(1.2,
2.4),得到结果为3,而不3.6。</P>
<P> </P>
<H4><A name=13.1.2>13.1.2</A> return 语句</H4>
<P>return
语句只在函数内使用。它起到让函数停止运行,然后返回一个值的作用。我们通过一个特殊的对比,可以看到return的第一个作用:让函数停止运行.</P>
<TABLE cellSpacing=0 cellPadding=0 width="82%" border=0>
<TBODY>
<TR>
<TD width="18%"></TD>
<TD width="43%">代码一</TD>
<TD width="39%">代码二</TD></TR>
<TR>
<TD width="18%"> </TD>
<TD width="43%">void OutputSomething()
<P>{</P>
<P> cout << "第1行" << endl;</P>
<P> cout << "第2行" << endl;</P>
<P> cout << "第3行" << endl; </P>
<P>}</P>
<P> </P>
<P> </P>
<P>OutputSomething();</P></TD>
<TD width="39%">void OutputSomething()
<P>{</P>
<P> cout << "第1行" << endl;</P>
<P> <FONT color=#ff0000>return;</FONT></P>
<P> cout << "第2行" << endl;</P>
<P> cout << "第3行" << endl; </P>
<P>}</P>
<P> </P>
<P>OutputSomething();</P></TD></TR>
<TR>
<TD width="18%">输出结果:</TD>
<TD vAlign=top width="43%" bgColor=#000000>
<P><FONT color=#ffffff>第1行</FONT>
<P><FONT color=#ffffff>第2行</FONT></P>
<P><FONT color=#ffffff>第3行</FONT></P></TD>
<TD vAlign=top width="39%" bgColor=#000000>
<P><FONT color=#ffffff>第1行</FONT></P></TD></TR></TBODY></TABLE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -