C++函数概念解析(2)
數(shù)組形參
我們?yōu)楹瘮?shù)傳遞一個(gè)數(shù)組時(shí),實(shí)際傳遞的是這個(gè)數(shù)組的指針
void print(const int*); void print(const int[]);//函數(shù)的意圖是作用于一個(gè)數(shù)組 void print(const int[10]);以數(shù)組作為形參的函數(shù)也必須保證這個(gè)數(shù)組不越界
使用標(biāo)記指定數(shù)組長(zhǎng)度
以C風(fēng)格字符串為例,函數(shù)在遇到空字符時(shí)停止
void print(const char*cp) {if(cp)while(*cp)cout<<*p++; }適合有明顯結(jié)束標(biāo)記且數(shù)據(jù)類型不容易混淆,比如一段文章的結(jié)尾
使用標(biāo)準(zhǔn)庫(kù)規(guī)范
傳遞數(shù)組首元素指針與尾元素指針也是一種管理數(shù)組形參的方法
void print(const int*beg,const int*end) {while(beg!=end)cout<<*beg++<<endl; }//輸出beg與end之間所有的元素調(diào)用如下:
int j[2]={0,1}; print(begin(j),end(j));第三種方法是專門定義一個(gè)表示數(shù)組大小的形參
void print(const int ia[],size_t size)//記錄大小的數(shù)據(jù)類型 {for(size_t i=0;i!=size;++i)//size_t就是專門記錄數(shù)據(jù)大小的數(shù)據(jù){cout<<ia[i]<<endl;} }調(diào)用print函數(shù)時(shí)
int j[]={0,1};print(j,end(j)-begin(j))C++中沒(méi)有真正的多維數(shù)組
C++ 里面更嚴(yán)格來(lái)說(shuō)其實(shí)只有數(shù)組的數(shù)組(又稱jagged array),這是為什么呢?在MSDN的第CA1814號(hào)文件中找到了答案:
In a multidimensional array, each element in each dimension has the same, fixed size as the other elements in that dimension. In a jagged array, which is an array of arrays, each inner array can be of a different size. By only using the space that’s needed for a given array, no space is wasted.
翻譯過(guò)來(lái)就是:
在多維數(shù)組中,每個(gè)維度中的每個(gè)元素與該維度中的其他元素具有相同的固定大小。在一個(gè)鋸齒狀數(shù)組(即數(shù)組的數(shù)組)中,每個(gè)內(nèi)部數(shù)組可以具有不同的大小。通過(guò)只使用給定數(shù)組所需的空間,不會(huì)浪費(fèi)任何空間。
C#與VB是真正支持多維數(shù)組的
main()函數(shù)
之前我們的main()函數(shù)基本為空,有時(shí)候確實(shí)需要給main()函數(shù)傳遞形參
int main(int argc,chat *argc[])第一個(gè)形參表示的是數(shù)組中字符串的數(shù)量
第二個(gè)形參argv是一個(gè)數(shù)組,它的元素是指向C風(fēng)格的字符串的指針
復(fù)習(xí)一下形參的作用:
它可以看成引用對(duì)象的另一個(gè)名字,不額外占用空間,效率高
在使用argv中的實(shí)參的時(shí)候,從argv[1]開(kāi)始,argv[0]是給保存程序的名字
無(wú)法預(yù)知有多少個(gè)實(shí)參的時(shí)候
initializer_list形參
void error_msg(initializer_list<string> il) {for(auto beg=i1.begin();beg!=i1.end();++beg)cout<<*beg<<" ";cout<<endl; }省略符形參
void foo(parm_list,...); void foo(...);函數(shù)的返回值
每個(gè)函數(shù)都必須有一個(gè)返回值嗎?答案是否定的
左值與右值
一些語(yǔ)言使用左值(l-value)和右值(r-value)的概念。左值具有確定的、可以被獲得的內(nèi)存地址。這意味著左值可以是變量,也可以是對(duì)指向特定內(nèi)存地址的指針解引用(dereference)的結(jié)果。例如C語(yǔ)言的表達(dá)式(4 + 9),在執(zhí)行時(shí),計(jì)算機(jī)生成一個(gè)整數(shù)值13,但因?yàn)槌绦驔](méi)有明確指定這個(gè)13如何在計(jì)算機(jī)中存儲(chǔ),所以這個(gè)表達(dá)式產(chǎn)生一個(gè)右值。另一方面,如果一個(gè)C程序聲明了一個(gè)變量x并將x賦值為13,那么表達(dá)式(x)的值是13,并且是一個(gè)左值
調(diào)用一個(gè)返回引用的函數(shù)得到左值,其他返回類型得到右值
特別的,我們能為返回類型是非常量引用的函數(shù)的結(jié)果賦值
列表初始化返回值
函數(shù)可以返回花括號(hào)包圍的值的列表,函數(shù)不能返回?cái)?shù)組,但可以返回?cái)?shù)組的指針
總結(jié)
以上是生活随笔為你收集整理的C++函数概念解析(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何在 Windows 中使用「iClo
- 下一篇: C++中函数概念解析(3)