C++ 函數學習筆記

來源:互聯網
上載者:User


函數

建立自己的函數必須自行處理這3方面 - 定義、提供原型和調用。

庫函數是已經定義和編譯好的函數,同時可以使用標準標頭檔提供其原型,因此只需要正確的調用這種函數即可。

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

函數原型不要求提供變數名,有類型列表就足夠了。C++中函數原型是必不可少的。

函數和數組

C++將數組名解釋為其第一個元素的地址:

cookies == & cookies[0]cookies[i] == *(cookies + i)

該規則有一些例外:

1、數組聲明使用數組名來標記儲存位置
2、對數組使用sizeof得到整個數組的長度
3、將地址符&使用者數組名時,將返回整個數組的地址,

數組的函數原型

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

傳遞常規變數時,函數將使用該變數的拷貝;但傳遞數組時,函數將使用原來的數組。
為了防止函數無意中修改數組的內容,可在聲明形參時使用關鍵字const

void show array(const double ar[], int n);

指標和const

1、讓指標指向一個常量對象,可以防止指標來修改指向的值。

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

pt的聲明並不意味著它指向的值實際上就是一個常量,而只是意味著對pt而言,這個值是常量。例如,pt指向age,而age不是const。可以直接通過age變數來修改age的值,但不能使用pt指標來修改它。
const只能防止修改*pt指向的值,而不能防止修改pt的值。也就是說可以將一個新地址賦值給pt。

可以將常規變數賦值給指向const的指標,因此還有兩種可能:將const變數的地址賦值給指向const的指標、將const的地址賦值給常規指標。

const float g_earth = 9.80;const float *pe = &g_earth; //valid const float g_moon = 1.63;float *pm = &g_moon; //invalid

2、將指標本身聲明為常量,這樣可以防止改變指標指向的位置。

int sloth = 3;const int * ps = &sloth; // a pointer to const intint * const finger = &sloth; //a const pointer to int

關鍵字const的位置不同,使得finger只能指向sloth,但允許使用finger來修改sloth的值。中間的聲明不允許使用ps來修改sloth的值,但允許將ps指向另一個位置。簡而言之,finger和*ps都是const,而*finger和ps不是。

3、指標和值均為常量

double trouble = 2.0E30;const double * const stick = &trouble;

此時,stick只能指向trouble,並且不能用stick來修改trouble的值。

函數和C-風格字串

C-風格字串由一系列字元組成,以Null 字元結尾。數組相關知識也適用於C-風格字串。例如,將字串作為參數時意味著傳遞的是地址,也可以使用const來禁止對字串進行修改。
將字串作為參數傳遞給函數,有3中表示字串的方式:

char數組;

用引號括起的字串常量(也成為字串字面值);
被設定為字串的地址的char指標

char ghost[15] = "galloping";char * str = "galumphing";

將字串作為參數來傳遞,實際上傳遞的是字串第一個字元的地址。意味著函數原型應聲明為 char *類型。
C-風格字串與常規char數組之間的一個重要區別是,字串有內建的結束字元,這意味著不必將字串長度作為參數傳遞給函數。

函數和string對象

雖然C-風格字串和string對象的用途幾乎相同,但與數組相比,string對象與結構更相似。例如,可以將一個結構賦給另一個結構,也可以將一個對象賦值給另一個對象。可以將結構作為完整的實體傳遞給函數,也可以將對象作為完整的實體進行傳遞。如果需要多個字串,可以聲明一個string對象數組,而不是二維char數組。

函數和結構體

與數組名就是數組第一個元素的地址不同的是,結構名只是結構的名稱,要擷取結構的地址,必須使用地址運算子&。

傳遞結構的地址

調用函數時,將結構的地址(&st)而不是結構本身(st)傳給給它;
將形參聲明為指向st的指標,即st *類型。如果不允許修改結構,可以使用const修飾符;
由於形參是指標而不是結構,因此應用間接成員運算子(->),而不是成員運算子(.)。
函數指標

與資料項目相似,函數也有地址。函數的地址是儲存其機器語言代碼的記憶體的開始地址。可以編寫將另一個函數的地址作為參數的函數,這樣子第一個函數將能夠找到第二個函數,並運行它。函數名即為函數的地址

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.