成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

《C++primerplus》第7章:函數(shù)——C++的編程模塊-創(chuàng)新互聯(lián)

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

C++對于返回值的類型有一定的限制:不能是數(shù)組,但可以是其他任何類型——整數(shù)、浮點(diǎn)數(shù)、指針,甚至可以是結(jié)構(gòu)和對象(有趣的是,雖然C++函數(shù)不能直接返回?cái)?shù)組,但可以將數(shù)組作為結(jié)構(gòu)或?qū)ο蠼M成部分來返回)。

塔什庫爾干塔吉克ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

在函數(shù)聲明的參數(shù)列表中,可以包括變量名,也可以不包括。原型中的變量名相當(dāng)于占位符,因此不必與函數(shù)定義中的變量名相同。

在C++中,括號為空與在括號中使用關(guān)鍵字 void 是等效的——意味著函數(shù)沒有參數(shù)。

在 C++ 中,不指定參數(shù)列表時應(yīng)使用省略號:如:
void say_bye(…);
通常,僅當(dāng)與接受可變參數(shù)的 C 函數(shù)(如printf()) 交互時才需要這樣做。

靜態(tài)類型檢查,編譯階段,檢查函數(shù)參數(shù)類型是否正確,并進(jìn)行可以進(jìn)行的類型轉(zhuǎn)換。

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

聲明中的變量名不必與定義中的變量名相同,而且可以省略。

一句話總結(jié),按值傳遞就是函數(shù)自身會創(chuàng)建以形參名為名的變量來使用,并不會修改給函數(shù)傳值的實(shí)參的值。

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

函數(shù)如何用指針來處理數(shù)組?
在大多數(shù)情況下,C++ 將數(shù)組名視為指針,但有一些例外,首先,數(shù)組聲明使用數(shù)組名來標(biāo)記存儲位置;其次,對數(shù)組名使用 sizeof 將得到整個數(shù)組的長度(以字節(jié)為單位),第三,將地址運(yùn)算符&用于數(shù)組名時,將返回整個數(shù)組的地址,對它加1是加整個數(shù)組占用的字節(jié)數(shù),而不是單個元素的字節(jié)數(shù)。

int sum_arr(int arr[], int n);

int sum_arr(int * arr, int n);

用 int * arr 替換了 int arr[],這兩個函數(shù)頭都是正確的,在C++中,僅在函數(shù)參數(shù)列表中,int *arr 和 int arr[]才是相同的。它們都意味著 arr 是一個int指針。然而,數(shù)組表示法( int arr[] ) 提醒用戶,arr 不僅指向int,還指向int數(shù)組的第一個int。
當(dāng)指針指向數(shù)組的第一個元素時,一般使用數(shù)組表示法;而當(dāng)指針指向一個獨(dú)立的值時,一般使用指針表示法。

但在其它上下文中,并不能用 int arr[]來聲明一個指針。

傳遞常規(guī)變量時,函數(shù)將使用該變量的拷貝,但傳遞數(shù)組時,函數(shù)將使用原來的數(shù)組。實(shí)際上,這種區(qū)別并不違反C++按值傳遞的原則,傳遞數(shù)組時仍然傳遞了一個值,這個值是地址,這個值被賦給了一個新的變量,但是這個值(也就是這個地址)指向的就是原來的數(shù)組。

注意,函數(shù)參數(shù)里使用int arr[],在函數(shù)內(nèi)對arr使用sizeof,得到的是指針變量的長度,而不是整個數(shù)組的長度。這也是必須顯示傳遞數(shù)組長度,而不是在函數(shù)內(nèi)部使用sizeof的原因;指針本身并沒有指出數(shù)組的長度。

注意,為將數(shù)組類型和元素?cái)?shù)量告訴數(shù)組處理函數(shù),請通過兩個不同的參數(shù)來傳遞它們:
void fillArray(int arr[], int size);
而不要試圖使用方括號表示法來傳遞數(shù)組長度:
void fillArray(int arr[size]);這是錯誤的。

void show_array(const double ar[], int n);
const double arr[],表明,指針ar指向的是常量數(shù)據(jù),這意味著不能使用arr修改該數(shù)據(jù)。但這并不意味著原始數(shù)組必須是常量,而只是意味著不能在show_array()函數(shù)中使用 ar 來修改這些數(shù)據(jù)。

對于處理數(shù)組的 C++ 函數(shù),必須將數(shù)組中的數(shù)據(jù)種類、數(shù)組的起始位置和數(shù)組中元素?cái)?shù)量提交給它;傳統(tǒng)的C/C++方法是,將指向數(shù)組起始處的指針作為一個參數(shù),將數(shù)組長度作為第二個參數(shù)。還有另一種給函數(shù)提供所需信息的方法,即指定元素區(qū)間(range),這可以通過傳遞兩個指針來完成:一個指針標(biāo)識數(shù)組的開頭,另一個指針標(biāo)識數(shù)組的尾部。

C++禁止將const變量的地址分配給非const指針。(如果非要這樣做,可以使用強(qiáng)制類型轉(zhuǎn)換來突破這種限制)

注意
const int * ps
int * const ps
兩者的區(qū)別是,前者表示指針指向的內(nèi)容不能被修改,后者表示指針本身不能被修改

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

int sum( int (*ar)[4], int size);
int sum( int ar[] [4], int size);

使用方式

ar[r][c];

*(*(ar+r)+c)

函數(shù)和C-風(fēng)格字符串

C-風(fēng)格字符串由一系列字符組成,以空字符結(jié)尾。有關(guān)函數(shù)的數(shù)組的規(guī)則也適用于字符串函數(shù)。但字符串還有一些特殊的規(guī)則。

假設(shè)要將字符串作為參數(shù)傳遞給函數(shù),則表示字符串的方式有三種:

  • char數(shù)組;
  • 用括號引起的字符串常量(也稱字符串字面值);
  • 被設(shè)置為字符串的地址的 char 指針
    但上述 3 種選擇的類型都是 char 指針(準(zhǔn)確地說是 char*),因此可以將其作為字符串處理函數(shù)的參數(shù)

可以說是將字符串作為參數(shù)來傳遞,但實(shí)際傳遞的是字符串第一個字符的地址。這意味著字符串函數(shù)聲明將其表示字符串的形參聲明為 char* 類型。

C-風(fēng)格字符串與常規(guī) char 數(shù)組之間的一個重要區(qū)別是,字符串有內(nèi)置的結(jié)束字符,這意味著不必將字符串長度作為參數(shù)傳遞給函數(shù),而函數(shù)可以使用循環(huán)以此檢查字符串中的每個字符,指導(dǎo)遇到結(jié)尾的空字符為止。

一種處理字符串中字符的標(biāo)準(zhǔn)方式:

while(*str){statements;
	str++;
}
函數(shù)和結(jié)構(gòu)

為結(jié)構(gòu)編寫函數(shù)比為數(shù)組編寫函數(shù)要簡單得多,雖然結(jié)構(gòu)變量和數(shù)組一樣,都已存儲多個數(shù)據(jù)項(xiàng),但在涉及到函數(shù)時,結(jié)構(gòu)變量的行為更接近于基本的單值變量。使用結(jié)構(gòu)來編程時,最直接的方式是像處理基本類型那樣來處理結(jié)構(gòu):也就是說,將結(jié)構(gòu)作為參數(shù)傳遞,并在需要時將結(jié)構(gòu)用作返回值使用。

按值傳遞;傳遞地址,使用指針來訪問結(jié)構(gòu)的內(nèi)容;按引用傳遞。

按值傳遞:當(dāng)將一個實(shí)參傳遞給函數(shù)時,結(jié)構(gòu)的內(nèi)容會被拷貝到形參中,函數(shù)隨后使用拷貝完成工作。

使用指針傳遞的時候可以把要修改的結(jié)構(gòu)的地址作為一個參數(shù),傳遞給函數(shù)。

函數(shù)和 string 對象

除了getline()外,程序一般像對待內(nèi)置類型一樣對待string對象。

函數(shù)和 array 對象

如果需要使用array類,要包含頭文件array,而名稱array位于名稱空間std中。

std::arrayexpenses;

使用指針來操作array的時候要注意運(yùn)算優(yōu)先級的問題;
(*pa)[i]才能表示array的第i項(xiàng);

遞歸

從函數(shù)體內(nèi)調(diào)用函數(shù)本身的地方開始,調(diào)用者暫停運(yùn)行,執(zhí)行被調(diào)用者代碼。

遞歸的方式可用于分而治之的策略。

函數(shù)指針

與數(shù)據(jù)項(xiàng)相似,函數(shù)也有地址。函數(shù)的地址是存儲其機(jī)器語言代碼的內(nèi)存的開始地址。通常,這些地址對用戶而言,既不重要,也沒有什么用處,但對程序而言,卻很有用。例如,可以編寫將另一個函數(shù)的地址作為參數(shù)的函數(shù)。這樣第一個函數(shù)將能夠找到第二個函數(shù),并運(yùn)行它。與直接調(diào)用另一個函數(shù)相比,這種方法很笨拙,但它允許在不同的時間傳遞不同函數(shù)的地址,這意味著可以在不同的時間使用不同的函數(shù)。

函數(shù)指針的基礎(chǔ)知識
  1. 獲取函數(shù)地址
    使用函數(shù)名(后面不跟參數(shù))即可。

  2. 聲明函數(shù)指針
    double pam(int);
    double (*pf) (int);

    void estimate(int lines, double (*pf) (int));
    estimate(50, pam);
    顯然,使用函數(shù)指針時,比較棘手的是編寫原型,而傳遞地址則非常簡單。

  3. 使用指針來調(diào)用函數(shù)
    double pam(int);
    double (*pf) (int);
    pf = pam;
    double x = pam(4);
    double y = (*pf)(5);
    實(shí)際上,C++ 也允許像使用函數(shù)名那樣使用 pf:
    double y = pf(5);
    第一種格式較為復(fù)雜,但是給出了強(qiáng)有力的提示——代碼正在使用函數(shù)指針。

注意這里和普通變量不同,對函數(shù)指針來說 使用(*pf) 和pf作為函數(shù)名都是可以的,兩者是等價的,而普通變量的指針不是這樣。

深入探討函數(shù)指針

注意以指針為元素的數(shù)組,和指向數(shù)組的指針在表示上的區(qū)別,
[]的優(yōu)先級比*高

函數(shù)指針可以在聲明的時候初始化,方法是 聲明時像賦值語句一樣賦值(賦值的內(nèi)容是函數(shù)名)

注意使用 auto

還可以使用 typedef 來簡化

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前名稱:《C++primerplus》第7章:函數(shù)——C++的編程模塊-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://jinyejixie.com/article38/ccjepp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、微信公眾號、服務(wù)器托管、App開發(fā)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
璧山县| 蓬安县| 铜鼓县| 定襄县| 洪江市| 进贤县| 环江| 维西| 岳阳县| 阜城县| 泸西县| 龙井市| 河北区| 尉氏县| 汉中市| 南安市| 年辖:市辖区| 宿州市| 黄大仙区| 厦门市| 四会市| 玉溪市| 绿春县| 郧西县| 宝丰县| 周宁县| 双鸭山市| 讷河市| 昭平县| 类乌齐县| 保亭| 西乌| 永丰县| 兰坪| 福贡县| 盐亭县| 康保县| 盈江县| 和顺县| 临夏市| 霞浦县|