最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++編程中對于函數(shù)的基本使用

 更新時間:2015年09月10日 15:22:47   投稿:goldensun  
這篇文章主要介紹了詳解C++編程中對于函數(shù)的使用,包括函數(shù)的參數(shù)和返回值以及調(diào)用等基本的知識點,需要的朋友可以參考下

形式參數(shù)和實際參數(shù)

在調(diào)用函數(shù)時,大多數(shù)情況下,函數(shù)是帶參數(shù)的。主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞關(guān)系。前面已提到:在定義函數(shù)時函數(shù)名后面括號中的變量名稱為形式參數(shù)(formal parameter,簡稱形參),在主調(diào)函數(shù)中調(diào)用一個函數(shù)時,函數(shù)名后面括號中的參數(shù)(可以是一個表達(dá)式)稱為實際參數(shù)(actual parameter,簡稱實參)。

【例】調(diào)用函數(shù)時的數(shù)據(jù)傳遞。

#include <iostream>
using namespace std;
int max(int x,int y) //定義有參函數(shù)max
{
  int z;
  z=x>y?x:y;
  return(z);
}
int main( )
{
  int a,b,c;
  cout<<"please enter two integer numbers:";
  cin>>a>>b;
  c=max(a,b);//調(diào)用max函數(shù),給定實參為a,b。函數(shù)值賦給c
  cout<<"max="<<c<<endl;
  return 0;
}

運(yùn)行情況如下:

please enter two integer numbers:2 3↙
max=3

有關(guān)形參與實參的說明:
1) 在定義函數(shù)時指定的形參,在未出現(xiàn)函數(shù)調(diào)用時,它們并不占內(nèi)存中的存儲單元,因此稱它們是形式參數(shù)或虛擬參數(shù),表示它們并不是實際存在的數(shù)據(jù),只有在發(fā)生函數(shù)調(diào)用時,函數(shù)max中的形參才被分配內(nèi)存單元,以便接收從實參傳來的數(shù)據(jù)。在調(diào)用結(jié)束后,形參所占的內(nèi)存單元也被釋放。

2) 實參可以是常量、變量或表達(dá)式,如max(3, a+b);但要求a和b有確定的值。以便在調(diào)用函數(shù)時將實參的值賦給形參。

3) 在定義函數(shù)時,必須在函數(shù)首部指定形參的類型(見示例程序第3行)。

4) 實參與形參的類型應(yīng)相同或賦值兼容。例4.2中實參和形參都是整型,這是合法的、正確的。如果實參為整型而形參為實型,或者相反,則按不同類型數(shù)值的賦值規(guī)則進(jìn)行轉(zhuǎn)換。例如實參a的值為3.5,而形參x為整型,則將3.5轉(zhuǎn)換成整數(shù)3,然后送到形參b。字符型與整型可以互相通用。

5) 實參變量對形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。在調(diào)用函數(shù)時,編譯系統(tǒng)臨時給形參分配存儲單元。

請注意:實參單元與形參單元是不同的單元。下圖表示將實參a和b的值2和3傳遞給對應(yīng)的形參x和y。


調(diào)用結(jié)束后,形參單元被釋放,實參單元仍保留并維持原值。因此,在執(zhí)行一個被調(diào)用函數(shù)時,形參的值如果發(fā)生改變,并不會改變主調(diào)函數(shù)中實參的值。例如,若在執(zhí)行max函數(shù)過程中形參x和y的值變?yōu)?0和15,調(diào)用結(jié)束后,實參a和b仍為2和3,見上圖。
函數(shù)的返回值

1) 函數(shù)的返回值是通過函數(shù)中的return語句獲得的。return語句將被調(diào)用函數(shù)中的一個確定值帶回主調(diào)函數(shù)中去。

return語句后面的括號可以要,也可以不要。return后面的值可以是一個表達(dá)式。

2) 函數(shù)值的類型。既然函數(shù)有返回值,這個值當(dāng)然應(yīng)屬于某一個確定的類型,應(yīng)當(dāng)在定義函數(shù)時指定函數(shù)值的類型。

3) 如果函數(shù)值的類型和return語句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn),即函數(shù)類型決定返回值的類型。對數(shù)值型數(shù)據(jù),可以自動進(jìn)行類型轉(zhuǎn)換。

函數(shù)調(diào)用的一般形式

函數(shù)調(diào)用的一般形式為:

  函數(shù)名([實參表列]);


如果是調(diào)用無參函數(shù),則“實參表列”可以沒有,但括號不能省略。如果實參表列包含多個實參,則各參數(shù)間用逗號隔開。實參與形參的個數(shù)應(yīng)相等,類型應(yīng)匹配(相同或賦值兼容)。實參與形參按順序?qū)?yīng),一對一地傳遞數(shù)據(jù)。但應(yīng)說明,如果實參表列包括多個實參,對實參求值的順序并不是確定的。
函數(shù)調(diào)用的方式

按函數(shù)在語句中的作用來分,可以有以下3種函數(shù)調(diào)用方式:
(1)函數(shù)語句
把函數(shù)調(diào)用單獨(dú)作為一個語句,并不要求函數(shù)帶回一個值,只是要求函數(shù)完成一定的操作。如例4.1中的printstar( );
(2)函數(shù)表達(dá)式
函數(shù)出現(xiàn)在一個表達(dá)式中,這時要求函數(shù)帶回一個確定的值以參加表達(dá)式的運(yùn)算。如c=2*max(a, b);
(3)函數(shù)參數(shù)
函數(shù)調(diào)用作為一個函數(shù)的實參。如:

m=max(a, max(b, c)); //max(b, c)是函數(shù)調(diào)用,其值作為外層max函數(shù)調(diào)用的一個實參

對被調(diào)用函數(shù)的聲明和函數(shù)原型

在一個函數(shù)中調(diào)用另一個函數(shù)(即被調(diào)用函數(shù))需要具備以下條件:
首先被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù)。
如果使用庫函數(shù),一般還應(yīng)該在本文件開頭用#include命令將有關(guān)頭文件“包含”到本文件中來。
如果使用用戶自己定義的函數(shù),而該函數(shù)與調(diào)用它的函數(shù)(即主調(diào)函數(shù))在同一個程序單位中,且位置在主調(diào)函數(shù)之后,則必須在調(diào)用此函數(shù)之前對被調(diào)用的函數(shù)作聲明。

所謂函數(shù)聲明(declare),就是在函數(shù)尚在未定義的情況下,事先將該函數(shù)的有關(guān)信息通知編譯系統(tǒng),以便使編譯能正常進(jìn)行。

【例】對被調(diào)用的函數(shù)作聲明。

#include <iostream>
using namespace std;
int main( )
{
  float add(float x,float y); //對add函數(shù)作聲明
  float a,b,c;
  cout<<"please enter a,b:";
  cin>>a>>b;
  c=add(a,b);
  cout<<"sum="<<c<<endl;
  return 0;
}
float add(float x,float y)//定義add函數(shù)
{
  float z;
  z=x+y;
  return (z);
}

運(yùn)行情況如下:

please enter a, b: 123.68 456.45↙
sum=580.13

注意:對函數(shù)的定義和聲明不是同一件事情。定義是指對函數(shù)功能的確立,包括指定函數(shù)名、函數(shù)類型、形參及其類型、函數(shù)體等,它是一個完整的、獨(dú)立的函數(shù)單位。而聲明的作用則是把函數(shù)的名字、函數(shù)類型以及形參的個數(shù)、類型和順序(注意,不包括函數(shù)體)通知編譯系統(tǒng),以便在對包含函數(shù)調(diào)用的語句進(jìn)行編譯時,據(jù)此對其進(jìn)行對照檢查(例如函數(shù)名是否正確,實參與形參的類型和個數(shù)是否一致)。

其實,在函數(shù)聲明中也可以不寫形參名,而只寫形參的類型,如

  float add(float, float);

這種函數(shù)聲明稱為函數(shù)原型(function prototype)。使用函數(shù)原型是C和C++的一個重要特點。它的作用主要是: 根據(jù)函數(shù)原型在程序編譯階段對調(diào)用函數(shù)的合法性進(jìn)行全面檢查。如果發(fā)現(xiàn)與函數(shù)原型不匹配的函數(shù)調(diào)用就報告編譯出錯。它屬于語法錯誤。用戶根據(jù)屏幕顯示的出錯信息很容易發(fā)現(xiàn)和糾正錯誤。

函數(shù)原型的一般形式為:

  函數(shù)類型 函數(shù)名(參數(shù)類型1, 參數(shù)類型2…);



  函數(shù)類型 函數(shù)名(參數(shù)類型1 參數(shù)名1, 參數(shù)類型2 參數(shù)名2…);

第(1)種形式是基本的形式。為了便于閱讀程序,也允許在函數(shù)原型中加上參數(shù)名,就成了第(2)種形式。但編譯系統(tǒng)并不檢查參數(shù)名。因此參數(shù)名是什么都無所謂。上面程序中的聲明也可以寫成

  float add(float a, float b); //參數(shù)名不用x、y,而用a、b


效果完全相同。

應(yīng)當(dāng)保證函數(shù)原型與函數(shù)首部寫法上的一致,即函數(shù)類型、函數(shù)名、參數(shù)個數(shù)、參數(shù)類型和參數(shù)順序必須相同。在函數(shù)調(diào)用時函數(shù)名、實參類型和實參個數(shù)應(yīng)與函數(shù)原型一致。

兩點說明:
1) 前面已說明,如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之前,可以不必加以聲明。因為編譯系統(tǒng)已經(jīng)事先知道了已定義的函數(shù)類型,會根據(jù)函數(shù)首部提供的信息對函數(shù)的調(diào)用作正確性檢查。

有經(jīng)驗的程序編制人員一般都把main函數(shù)寫在最前面,這樣對整個程序的結(jié)構(gòu)和作用一目了然,統(tǒng)覽全局,然后再具體了解各函數(shù)的細(xì)節(jié)。此外,用函數(shù)原型來聲明函數(shù),還能減少編寫程序時可能出現(xiàn)的錯誤。由于函數(shù)聲明的位置與函數(shù)調(diào)用語句的位置比較近,因此在寫程序時便于就近參照函數(shù)原型來書寫函數(shù)調(diào)用,不易出錯。所以應(yīng)養(yǎng)成對所有用到的函數(shù)作聲明的習(xí)慣。這是保證程序正確性和可讀性的重要環(huán)節(jié)。

2) 函數(shù)聲明的位置可以在調(diào)用函數(shù)所在的函數(shù)中,也可以在函數(shù)之外。如果函數(shù)聲明放在函數(shù)的外部,在所有函數(shù)定義之前,則在各個主調(diào)函數(shù)中不必對所調(diào)用的函數(shù)再作聲明。例如:

char letter(char, char); //本行和以下兩行函數(shù)聲明在所有函數(shù)之前且在函數(shù)外部
float f(float, float); //因而作用域是整個文件
int i(float, float);
int main( )
{…}//在main函數(shù)中不必對它所調(diào)用的函數(shù)作聲明
char letter(char c1, char c2) //定義letter函數(shù)
{…}
float f(float x, float y)//定義f函數(shù)
{…}
int i(float j, float k) //定義i函數(shù)
{…}

如果一個函數(shù)被多個函數(shù)所調(diào)用,用這種方法比較好,不必在每個主調(diào)函數(shù)中重復(fù)聲明。

相關(guān)文章

  • C語言詳解實現(xiàn)猜數(shù)字游戲步驟

    C語言詳解實現(xiàn)猜數(shù)字游戲步驟

    猜數(shù)字是興起于英國的益智類小游戲,起源于20世紀(jì)中期,一般由兩個人或多人玩,也可以由一個人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來實現(xiàn)這個游戲案例
    2022-07-07
  • C++實現(xiàn)LeetCode(904.水果裝入果籃)

    C++實現(xiàn)LeetCode(904.水果裝入果籃)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(904.水果裝入果籃),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • c++可變參數(shù)模板使用示例源碼解析

    c++可變參數(shù)模板使用示例源碼解析

    這篇文章主要為大家介紹了c++可變參數(shù)模板使用示例源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 基于C/C++將派生類賦值給基類的超詳細(xì)講解

    基于C/C++將派生類賦值給基類的超詳細(xì)講解

    類其實也是一種數(shù)據(jù)類型,也可以發(fā)生數(shù)據(jù)類型轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于基于C/C++將派生類賦值給基類的超詳細(xì)講解,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • C語言函數(shù)指針的使用詳解

    C語言函數(shù)指針的使用詳解

    在C語言中,函數(shù)指針是指向函數(shù)的指針變量,本文主要介紹了C語言函數(shù)指針的使用詳解,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)

    C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)

    這篇文章主要介紹了C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 約瑟夫經(jīng)典問題擴(kuò)展成雙向約瑟夫問題

    約瑟夫經(jīng)典問題擴(kuò)展成雙向約瑟夫問題

    今天小編就為大家分享一篇關(guān)于約瑟夫經(jīng)典問題擴(kuò)展成雙向約瑟夫問題,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • C語言超詳細(xì)講解輪轉(zhuǎn)數(shù)組

    C語言超詳細(xì)講解輪轉(zhuǎn)數(shù)組

    這篇文章主要給大家講解輪轉(zhuǎn)數(shù)組的問題,一個問題不局限于一種解法,希望你看了本文的解決方法以后可以舉一反三自己編寫,這樣你的技術(shù)水平會有質(zhì)的提高
    2022-04-04
  • C++實現(xiàn)LeetCode(93.復(fù)原IP地址)

    C++實現(xiàn)LeetCode(93.復(fù)原IP地址)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(93.復(fù)原IP地址),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言與Lua之間的相互調(diào)用詳解

    C語言與Lua之間的相互調(diào)用詳解

    這篇文章主要給大家介紹了關(guān)于C語言與Lua之間的相互調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01

最新評論

通江县| 沁阳市| 桐梓县| 类乌齐县| 宜春市| 巨野县| 徐汇区| 兰溪市| 色达县| 襄垣县| 即墨市| 太原市| 新竹县| 盐池县| 丰县| 延吉市| 屯昌县| 牙克石市| 阿克陶县| 汶上县| 德州市| 巴青县| 巧家县| 龙海市| 高州市| 阳原县| 新余市| 武山县| 沭阳县| 泗阳县| 河南省| 江川县| 东光县| 友谊县| 休宁县| 金堂县| 甘孜县| 广平县| 门源| 永定县| 清水河县|