?? 第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 + -