国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第七章——函數(shù)(C++的編程模塊)

這篇具有很好參考價(jià)值的文章主要介紹了第七章——函數(shù)(C++的編程模塊)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

復(fù)習(xí)函數(shù)的基本知識(shí)

要使用C++函數(shù),必須完成如下工作:

  • 提供函數(shù)定義
  • 提供函數(shù)原型
  • 調(diào)用函數(shù)?

庫(kù)函數(shù)是已經(jīng)定義和編譯好的函數(shù),同時(shí)可以使用標(biāo)準(zhǔn)庫(kù)頭文件提供其原型,因此只需要正確地調(diào)用這種函數(shù)即可。但是創(chuàng)建自己的函數(shù)時(shí),必須自行處理上面提到的3個(gè)方面。例如

#include<iostream>
using namespace std;

void hello();	//函數(shù)的聲明

int main()
{
	cout << "主函數(shù)將調(diào)用自己編寫(xiě)的hello這個(gè)函數(shù):" << endl;
	hello();	//函數(shù)的調(diào)用
	cout << "調(diào)用自編函數(shù)hello結(jié)束" << endl;
	return 0;
}

//函數(shù)的聲明
void hello() 
{
	cout << "我向大家問(wèn)好!"<<endl;
}

第七章——函數(shù)(C++的編程模塊),C++ Primer Plus,c++,開(kāi)發(fā)語(yǔ)言?

程序按行順序執(zhí)行。執(zhí)行函數(shù)hello()時(shí),將暫停main()中的代碼;等函數(shù)hello()執(zhí)行完畢之后,繼續(xù)執(zhí)行main()中的代碼。?

定義函數(shù)

可以將函數(shù)分為兩類(lèi):沒(méi)有返回值的和有返回值的函數(shù)。

沒(méi)有返回值的函數(shù)稱(chēng)為void函數(shù),通用格式如下:

void functionName(parameterList)
{
    statement(s)
    return;
}

?其中,parameterList指定了傳遞給函數(shù)的參數(shù)類(lèi)型和數(shù)量。

有返回值的函數(shù)將生成一個(gè)值,并將它返回給調(diào)用函數(shù)。這種函數(shù)的返回類(lèi)型被聲明為返回值的類(lèi)型。通用格式如下:

typeName functionName(parameterList)
{
    statement(s)
    return value;
}

?對(duì)于有返回值的函數(shù),必須使用返回語(yǔ)句,以便將值返回給調(diào)用函數(shù)。注意返回值的類(lèi)型不能是數(shù)組,但可以是其他任何類(lèi)型——整數(shù)、浮點(diǎn)數(shù)、指針、結(jié)構(gòu)、對(duì)象

第七章——函數(shù)(C++的編程模塊),C++ Primer Plus,c++,開(kāi)發(fā)語(yǔ)言

函數(shù)在執(zhí)行返回語(yǔ)句后結(jié)束。如果函數(shù)包含多條返回語(yǔ)句,則函數(shù)在執(zhí)行遇到的第一條返回語(yǔ)句后結(jié)束。例如

int bigger(int a,int b)
{
    if(a > b)
        return a;
    else
        return b;
}

?函數(shù)原型和函數(shù)調(diào)用

看下面一個(gè)例子

#include<iostream>
using namespace std;
void cheers(int);		//prototype, no return value
double cube(double x);  //prototype, return a double
int main()
{
	cheers(5);			//function call
	cout << "Give me a number: ";
	double side;
	cin >> side;
	double volume = cube(side);   //function call
	cout << "A " << side << "-foot cube has a volume of ";
	cout << volume << " cubic feet" << endl;
	cheers(cube(2));
	return 0;
}

void cheers(int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << "Cheers! ";
	}
	cout << endl;
}
double cube(double x)
{
	return x * x * x;
}

第七章——函數(shù)(C++的編程模塊),C++ Primer Plus,c++,開(kāi)發(fā)語(yǔ)言?

1.為什么需要原型?

原型描述了函數(shù)到編譯器的接口,也就是說(shuō)它將函數(shù)返回值的類(lèi)型(如果有的話)以及參數(shù)的類(lèi)型和參數(shù)的數(shù)量告訴編譯器。

函數(shù)原型是怎樣影響下面這條語(yǔ)句的??

double volume = cube(side);

?對(duì)于上面這條語(yǔ)句,函數(shù)原型告訴編譯器,cube()有一個(gè)double參數(shù)。如果程序沒(méi)有提供這樣的參數(shù),原型將讓編譯器能夠捕獲這種錯(cuò)誤;其次,cube()函數(shù)完成計(jì)算后,將把返回值放在指定的位置,然后調(diào)用函數(shù)(這里是main()函數(shù))將從這個(gè)指定位置取得返回值。由于原型指出了cube()的返回類(lèi)型是double,因此編譯器知道應(yīng)該檢索多少字節(jié)以及如何解釋它們。如果沒(méi)有這些信息,編譯器將只能進(jìn)行猜測(cè),而編譯器是不會(huì)這樣做的。

2.原型的語(yǔ)法

函數(shù)的原型是一條語(yǔ)句,因此必須以分號(hào)結(jié)束。最簡(jiǎn)單的方法就是 復(fù)制函數(shù)定義中的函數(shù)頭并添加分號(hào)。(函數(shù)原型不要求提供變量名,有類(lèi)型列表就行了;下面這兩種都是正確的)

void hell(int);
void hell(int x);

3.原型的功能

原型確保以下幾點(diǎn):

  • 編譯器正確處理函數(shù)返回值
  • 編譯器檢查使用的參數(shù)數(shù)目是否正確
  • 編譯器檢查使用的參數(shù)類(lèi)型是否正確;如果不正確,則在能力范圍內(nèi)轉(zhuǎn)換為正確的類(lèi)型?

函數(shù)參數(shù)和按值傳遞?

?C++通常按值傳遞參數(shù),這意味著將數(shù)值參數(shù)傳遞給函數(shù),而后者將其賦給一個(gè)新的變量。

用于接收傳遞值的變量被稱(chēng)為形參,傳遞給函數(shù)的值被稱(chēng)為實(shí)參。

第七章——函數(shù)(C++的編程模塊),C++ Primer Plus,c++,開(kāi)發(fā)語(yǔ)言

?在函數(shù)中聲名的變量(包括參數(shù))是該函數(shù)私有的。在函數(shù)被調(diào)用時(shí),計(jì)算機(jī)將為這些變量分配內(nèi)存,在函數(shù)結(jié)束時(shí),計(jì)算機(jī)將釋放這些變量使用的內(nèi)存,這樣的變量被稱(chēng)為局部變量。

如果在main()中聲明了一個(gè)名為x的變量,同時(shí)在另一個(gè)函數(shù)中也聲明了一個(gè)名為x的變量,則它們將是兩個(gè)完全不同的、毫無(wú)聯(lián)系的變量

第七章——函數(shù)(C++的編程模塊),C++ Primer Plus,c++,開(kāi)發(fā)語(yǔ)言

多個(gè)參數(shù)

?函數(shù)可以有多個(gè)參數(shù),在調(diào)用函數(shù)時(shí),只需使用逗號(hào)將這些參數(shù)分開(kāi)即可:

n_chars('R',50);

?上述函數(shù)調(diào)用將兩個(gè)參數(shù)傳遞給函數(shù)n_chars()

同樣,在定義函數(shù)時(shí),也在函數(shù)頭中使用由逗號(hào)分隔的參數(shù)聲名列表

void n_chars(char c,int n)  //two arguments

該函數(shù)頭指出,函數(shù)n_chars()接受一個(gè)char參數(shù)和一個(gè)int參數(shù),必須分別指定每個(gè)參數(shù)的類(lèi)型,不能像聲明常規(guī)變量那樣,將聲明組合在一起。

函數(shù)和數(shù)組

函數(shù)是處理復(fù)雜類(lèi)型(如數(shù)組、結(jié)構(gòu))的關(guān)鍵,下面學(xué)習(xí)如何將數(shù)組和函數(shù)結(jié)合在一起

假設(shè)現(xiàn)在要計(jì)算一個(gè)數(shù)組中所有元素的和,我們可以使用for循環(huán)逐個(gè)遍歷相加即可,這樣沒(méi)換一個(gè)數(shù)字都要進(jìn)行相應(yīng)的修改。這里我們寫(xiě)出一個(gè)統(tǒng)一的接口,讓對(duì)于不同的數(shù)組修改的盡可能少,不必每次都編寫(xiě)新的循環(huán)。

#include<iostream>
using namespace std;
const int ArSize = 8;
int sum_arr(int arr[], int n);
int main()
{
	int cookies[ArSize] = { 1,2,4,8,16,32,64,128 };
	int sum = sum_arr(cookies, ArSize);
	cout << "Total cookies: " << sum << endl;
	return 0;
}
int sum_arr(int arr[], int n)
{
	int total = 0;
	for (int i = 0; i < n; i++)
	{
		total = total + arr[i];
	}
	return total;
}

第七章——函數(shù)(C++的編程模塊),C++ Primer Plus,c++,開(kāi)發(fā)語(yǔ)言?

?我們看函數(shù)頭

int sum_arr(int arr[], int n)

?方括號(hào)指出arr是一個(gè)數(shù)組,方括號(hào)為空則表示可以將任何長(zhǎng)度的數(shù)組傳遞給該函數(shù)。但實(shí)際情況并不是這樣:arr實(shí)際上并不是數(shù)組,而是一個(gè)指針。(在編寫(xiě)函數(shù)的其余部分時(shí),可以將arr看作是數(shù)組)

函數(shù)如何使用指針來(lái)處理數(shù)組

前面介紹過(guò),C++將數(shù)組名解釋為其第一個(gè)元素的地址

cookies == &cookies[0]

?數(shù)組聲明使用數(shù)組名來(lái)標(biāo)記存儲(chǔ)位置,對(duì)數(shù)組名使用sizeof將得到整個(gè)數(shù)組的長(zhǎng)度(以字節(jié)為單位),將取地址運(yùn)算符&用于數(shù)組名時(shí),將返回整個(gè)數(shù)組的地址

在函數(shù)調(diào)用:

int sum = sum_arr(cookies, ArSize);

其中cookies是數(shù)組名,而根據(jù)C++規(guī)則,cookies是其第一個(gè)元素的地址,因此函數(shù)傳遞的是地址。由于數(shù)組的元素的類(lèi)型為int,因此cookies的類(lèi)型必須是int指針,即int*。這表明正確的函數(shù)頭應(yīng)該是這樣的

int sum_arr(int *arr,int n)

這證明 int *arr和int arr[ ]這兩個(gè)函數(shù)頭都是正確的。因?yàn)樵贑++中,當(dāng)且僅當(dāng)用于函數(shù)頭或函數(shù)原型中,它們兩者的含義才是相同的,都意味著arr是一個(gè)int指針。在其他的上下文中,? ? ? ? ? ? ? ? ? ?int * arr和int arr[ ]的含義是不同的。?

?我們可以看到,上述程序并沒(méi)有將數(shù)組內(nèi)容傳遞給函數(shù),而是將數(shù)組的位置(地址)、包含的元素種類(lèi)(類(lèi)型)以及元素?cái)?shù)目(變量n)傳遞給函數(shù),有了這些信息后,函數(shù)便可以使用原來(lái)的數(shù)組。

傳遞常規(guī)變量時(shí),函數(shù)將使用該變量的拷貝;但傳遞數(shù)組時(shí),函數(shù)將使用原來(lái)的數(shù)組

?將數(shù)組地址作為參數(shù)可以節(jié)省復(fù)制整個(gè)數(shù)組所需的時(shí)間和內(nèi)存。

指針和const

可以用兩種不同的方式將const關(guān)鍵字用于指針。

第一種方法是讓指針指向一個(gè)常量對(duì)象,這樣可以防止使用該指針來(lái)修改所指向的值;

int age = 39;
const int* pt = &age;

該聲明指出,pt指向一個(gè)const int(39),因此不能使用pt來(lái)修改這個(gè)值

*pt += 1;      //INVALID
cin >> *pt;    //INVALID

pt的聲明并不意味著它指向的值實(shí)際上就是一個(gè)常量,而只意味著對(duì)pt而言,這個(gè)值是常量。(例如pt指向age,而age不是const,可以直接通過(guò)age變量來(lái)修改age的值,但是不能使用pt指針來(lái)修改它)

*pt = 20; //INVALID
age = 20;

在這里注意又有兩種情況,以前我們總是將常規(guī)變量的地址賦給常規(guī)指針,而這里將常規(guī)變量的地址賦給指向const的指針(因此還有兩種情況:將const變量的地址賦給指向const的指針、將const變量的地址賦給常規(guī)指針。其實(shí)只有第一種可行,第二種是不可行的

const float g_earth = 9.8;
const float *pe = &g_earth;    //VALID

?對(duì)于這一種情況,既不能使用g_earth來(lái)修改值9.8,也不能使用指針pe來(lái)修改。

?盡可能使用const

將指針參數(shù)聲明為指向常量數(shù)據(jù)的指針有兩條理由:

1)這樣可以避免由于無(wú)意間修改數(shù)據(jù)而導(dǎo)致的編程錯(cuò)誤

2)使用const使得函數(shù)能夠處理const和非const實(shí)參,否則只能接受非const參數(shù)

第二種方法是將指針本身聲明為常量,這樣可以防止改變指針指向的位置。

int sloth = 3;
int *const finger = &sloth;

?這種聲明結(jié)構(gòu)使得finger只能指向sloth,但允許使用finger來(lái)修改sloth的值

遞歸

C++函數(shù)有一種有趣的特點(diǎn)——可以自己調(diào)用自己(與C語(yǔ)言不同的是,C++不允許main()調(diào)用自己),這種功能被稱(chēng)為遞歸。

?如果遞歸函數(shù)調(diào)用自己,則被調(diào)用的函數(shù)也將調(diào)用自己,這將無(wú)限循環(huán)下去,除非代碼中包含終止調(diào)用鏈的內(nèi)容。通常的方法將遞歸調(diào)用放在if語(yǔ)句中,如下面的一個(gè)遞歸函數(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-546812.html

void recurs(argumentlist)
{
    statements1
    if(test)
        recurs(arguments2)
    statements2
}

到了這里,關(guān)于第七章——函數(shù)(C++的編程模塊)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 第七章 函數(shù)矩陣

    第七章 函數(shù)矩陣

    和矩陣函數(shù)不同的是,函數(shù)矩陣本質(zhì)上是一個(gè)矩陣,是以函數(shù)作為元素的矩陣。 矩陣函數(shù)本質(zhì)上是一個(gè)矩陣,是以矩陣作為自變量的函數(shù)。 函數(shù)矩陣和數(shù)字矩陣的運(yùn)算法則完全相同。 不過(guò)矩陣的元素 a i j ( x ) a_{ij}(x) a ij ? ( x ) 需要是閉區(qū)間 [ a , b ] [a,b] [ a , b ] 上的實(shí)函數(shù)

    2024年02月04日
    瀏覽(22)
  • Python之第七章 函數(shù) --- 基礎(chǔ)

    Python之第七章 函數(shù) --- 基礎(chǔ)

    目錄 Python之第七章 函數(shù) --- 基本 1.模塊化程序設(shè)計(jì) 1.基本思想 2.特點(diǎn) 2.定義函數(shù) 1.格式: 2.函數(shù)名: 3.形式參數(shù): 4.函數(shù)體 ?編輯 3.函數(shù)調(diào)用 1.作用 2.格式 3.調(diào)用方式 4.實(shí)例 4.return語(yǔ)句 1.作用 2.注意 3.return可以返回任意Python的對(duì)象 5.函數(shù)參數(shù) 1.位置參數(shù) ?2.參數(shù) 3.默

    2024年02月09日
    瀏覽(28)
  • 《Flink學(xué)習(xí)筆記》——第七章 處理函數(shù)

    為了讓代碼有更強(qiáng)大的表現(xiàn)力和易用性,F(xiàn)link 本身提供了多層 API 在更底層,我們可以不定義任何具體的算子(比如 map,filter,或者 window),而只是提煉出一個(gè)統(tǒng)一的“處理”(process)操作——它是所有轉(zhuǎn)換算子的一個(gè)概括性的表達(dá),可以自定義處理邏輯,所以這一層接口

    2024年02月10日
    瀏覽(34)
  • 單片機(jī)入門(mén)教程:第七章 1602LCD液晶顯示模塊

    單片機(jī)入門(mén)教程:第七章 1602LCD液晶顯示模塊

    在單片機(jī)的人機(jī)交互系統(tǒng)中,常常需要顯示系統(tǒng)運(yùn)行中的某些信息和數(shù)據(jù),例如,字符、漢字或者圖形等。液晶顯示器(LCD)正好可以完成此項(xiàng)任務(wù),它是一種功耗很低的顯示器,在電子表、計(jì)算器、數(shù)碼相機(jī)、計(jì)算機(jī)的顯示器和液晶電視上都可以看到它的身影。液晶顯示器

    2024年02月09日
    瀏覽(23)
  • 【MySQL新手到通關(guān)】第七章 聚合函數(shù)使用詳解

    【MySQL新手到通關(guān)】第七章 聚合函數(shù)使用詳解

    為了方便測(cè)試,我們導(dǎo)入一些數(shù)據(jù) 數(shù)據(jù)如下 什么是聚合函數(shù) 聚合函數(shù)作用于一組數(shù)據(jù),并對(duì)一組數(shù)據(jù)返回一個(gè)值。 聚合函數(shù)類(lèi)型 AVG() 求平均值 SUM() 求和 MAX() 求最大值 MIN() 求最小值 COUNT() 求總行數(shù) 聚合函數(shù)語(yǔ)法 聚合函數(shù)不能嵌套調(diào)用。比如不能出現(xiàn)類(lèi)似“AVG(SUM(字段名稱(chēng)

    2024年02月08日
    瀏覽(21)
  • 基于FPGA的UDP協(xié)議棧設(shè)計(jì)第七章_RGMII模塊設(shè)計(jì)

    基于FPGA的UDP協(xié)議棧設(shè)計(jì)第七章_RGMII模塊設(shè)計(jì)

    該部分內(nèi)容主要需要掌握各種IO和時(shí)鐘相關(guān)的原語(yǔ)使用 以太網(wǎng)的通信離不開(kāi)PHY芯片,PHY芯片實(shí)現(xiàn)實(shí)現(xiàn)了RGMII接口到網(wǎng)口(RJ45)的轉(zhuǎn)換, RGMII接口就是PHY芯片和FPGA之間的接口。 GMII :GMII(Gigabit Media Independant Interface),千兆MII接口。GMII采用8位接口數(shù)據(jù),工作時(shí)鐘125MHz,因此傳

    2024年04月15日
    瀏覽(23)
  • go 筆記 第七章 golang 的函數(shù) func 方法

    聲明函數(shù) func 函數(shù)名(入?yún)? 類(lèi)型, 入?yún)? 類(lèi)型,… )(出參1 類(lèi)型, 出參2 類(lèi)型…){ 函數(shù)體,寫(xiě)邏輯 出參一定要全部 return, return 出參 } 函數(shù)內(nèi)部不可以聲明帶名字的函數(shù),可以聲明匿名函數(shù)和自執(zhí)行函數(shù) 函數(shù)名大寫(xiě)可以被其他包調(diào)用,小寫(xiě)私有,變量名也是一樣 return 后面可以不

    2024年02月15日
    瀏覽(24)
  • 曲線藝術(shù)編程 coding curves 第七章 拋物線(Parabolas)

    曲線藝術(shù)編程 coding curves 第七章 拋物線(Parabolas)

    原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 譯者:池中物王二狗(sheldon) blog: http://cnblogs.com/willian/ 源碼:github: https://github.com/willian12345/coding-curves 曲線藝術(shù)編程系列第7章 我承認(rèn)這一章腦暴時(shí),再三考慮過(guò)是否要將拋物線包含進(jìn)來(lái)。此篇覆蓋的拋物線比起之前三章

    2024年02月08日
    瀏覽(28)
  • 【Rust】Rust學(xué)習(xí) 第七章使用包、Crate和模塊管理不斷增長(zhǎng)的項(xiàng)目

    【Rust】Rust學(xué)習(xí) 第七章使用包、Crate和模塊管理不斷增長(zhǎng)的項(xiàng)目

    目前為止,我們編寫(xiě)的程序都在一個(gè)文件的一個(gè)模塊中。伴隨著項(xiàng)目的增長(zhǎng),你可以通過(guò)將代碼分解為多個(gè)模塊和多個(gè)文件來(lái)組織代碼。一個(gè)包可以包含多個(gè)二進(jìn)制 crate 項(xiàng)和一個(gè)可選的 crate 庫(kù)。伴隨著包的增長(zhǎng),你可以將包中的部分代碼提取出來(lái),做成獨(dú)立的 crate,這些

    2024年02月13日
    瀏覽(38)
  • Effective Modern C++ 第七章 并發(fā)API 1

    目錄 條款35:優(yōu)先使用基于任務(wù)而非基于線程的程序設(shè)計(jì) 要點(diǎn)速記: ?條款36:如果異步是必要的,則指定std::launch::async 要點(diǎn)速記: 參考:EffectiveModernCppChinese/src/7.TheConcurrencyAPI/Item35.md at master · CnTransGroup/EffectiveModernCppChinese (github.com) 基于任務(wù)的方法通常比基于線程的方法更

    2024年02月07日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包