老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

《C++primerplus》第7章:函數——C++的編程模塊-創新互聯

復習函數的基本知識

C++對于返回值的類型有一定的限制:不能是數組,但可以是其他任何類型——整數、浮點數、指針,甚至可以是結構和對象(有趣的是,雖然C++函數不能直接返回數組,但可以將數組作為結構或對象組成部分來返回)。

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

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

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

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

靜態類型檢查,編譯階段,檢查函數參數類型是否正確,并進行可以進行的類型轉換。

函數參數和按值傳遞

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

一句話總結,按值傳遞就是函數自身會創建以形參名為名的變量來使用,并不會修改給函數傳值的實參的值。

函數和數組

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

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

int sum_arr(int * arr, int n);

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

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

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

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

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

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

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

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

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

函數和二維數組

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

使用方式

ar[r][c];

*(*(ar+r)+c)

函數和C-風格字符串

C-風格字符串由一系列字符組成,以空字符結尾。有關函數的數組的規則也適用于字符串函數。但字符串還有一些特殊的規則。

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

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

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

C-風格字符串與常規 char 數組之間的一個重要區別是,字符串有內置的結束字符,這意味著不必將字符串長度作為參數傳遞給函數,而函數可以使用循環以此檢查字符串中的每個字符,指導遇到結尾的空字符為止。

一種處理字符串中字符的標準方式:

while(*str){statements;
	str++;
}
函數和結構

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

按值傳遞;傳遞地址,使用指針來訪問結構的內容;按引用傳遞。

按值傳遞:當將一個實參傳遞給函數時,結構的內容會被拷貝到形參中,函數隨后使用拷貝完成工作。

使用指針傳遞的時候可以把要修改的結構的地址作為一個參數,傳遞給函數。

函數和 string 對象

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

函數和 array 對象

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

std::arrayexpenses;

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

遞歸

從函數體內調用函數本身的地方開始,調用者暫停運行,執行被調用者代碼。

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

函數指針

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

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

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

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

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

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

深入探討函數指針

注意以指針為元素的數組,和指向數組的指針在表示上的區別,
[]的優先級比*高

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

注意使用 auto

還可以使用 typedef 來簡化

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧


新聞標題:《C++primerplus》第7章:函數——C++的編程模塊-創新互聯
瀏覽路徑:http://www.xueling.net.cn/article/ccjepp.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 男女在一起拔萝卜免费视频大全 | 亚洲色爱图小说专区 | 久久久国产精品成人免费 | 久久国产精品99精品国产 | 精品免费国产一区二区三区四区介绍 | 久久精品国产久精国产果冻传媒 | 亚洲AV无码专区亚洲AV紧身裤 | 久久久区 | 午夜秒播| 日本一二三高清 | 国产一区二区三区伦理 | 欧美特黄视频 | 欧美日韩一区二区三区四区在线观看 | 成年片黄色日本大片网站视频 | 日本一卡2卡三卡4卡无卡免费网站 | 91精品国产日韩91久久久久久 | 一级不卡| 91精品欧美久久久久久动漫 | 久久91精品国产91久久跳 | 91精品一区二区三区在线 | 一区二区在线观看免费 | 中文字幕第一页在线视频 | 嗯啊av| 黄色毛片在线播放 | 麻豆爱爱 | 91涩涩视频| 午夜精品一区二区三区在线视频 | 久久亚洲国产成人精品性色 | 国产精品国产一区 | 韩国hd高清xxxx免费 | 欧美性大战久久久久久久小说 | 另类校园春色小说综合网 | 超碰97在线看 | 在线观看亚洲人 | 人与野鲁xxxx毛片 | 日本熟妇人妻中出 | 精品深夜AV无码一区二区 | 亚洲国产精品视频观看 | 久久精品人成免费 | 国产精品人人爽人人爽av | 两口子交换真实刺激高潮 |