日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++函数概念解析(2)

發布時間:2023/12/2 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++函数概念解析(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數組形參

我們為函數傳遞一個數組時,實際傳遞的是這個數組的指針

void print(const int*); void print(const int[]);//函數的意圖是作用于一個數組 void print(const int[10]);

以數組作為形參的函數也必須保證這個數組不越界

使用標記指定數組長度

以C風格字符串為例,函數在遇到空字符時停止

void print(const char*cp) {if(cp)while(*cp)cout<<*p++; }

適合有明顯結束標記且數據類型不容易混淆,比如一段文章的結尾

使用標準庫規范

傳遞數組首元素指針與尾元素指針也是一種管理數組形參的方法

void print(const int*beg,const int*end) {while(beg!=end)cout<<*beg++<<endl; }//輸出beg與end之間所有的元素

調用如下:

int j[2]={0,1}; print(begin(j),end(j));

第三種方法是專門定義一個表示數組大小的形參

void print(const int ia[],size_t size)//記錄大小的數據類型 {for(size_t i=0;i!=size;++i)//size_t就是專門記錄數據大小的數據{cout<<ia[i]<<endl;} }

調用print函數時

int j[]={0,1};print(j,end(j)-begin(j))
C++中沒有真正的多維數組

C++ 里面更嚴格來說其實只有數組的數組(又稱jagged array),這是為什么呢?在MSDN的第CA1814號文件中找到了答案:

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.

翻譯過來就是:
在多維數組中,每個維度中的每個元素與該維度中的其他元素具有相同的固定大小。在一個鋸齒狀數組(即數組的數組)中,每個內部數組可以具有不同的大小。通過只使用給定數組所需的空間,不會浪費任何空間。

C#與VB是真正支持多維數組的

main()函數

之前我們的main()函數基本為空,有時候確實需要給main()函數傳遞形參

int main(int argc,chat *argc[])

第一個形參表示的是數組中字符串的數量
第二個形參argv是一個數組,它的元素是指向C風格的字符串的指針

復習一下形參的作用:

它可以看成引用對象的另一個名字,不額外占用空間,效率高

在使用argv中的實參的時候,從argv[1]開始,argv[0]是給保存程序的名字

無法預知有多少個實參的時候

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(...);
函數的返回值

每個函數都必須有一個返回值嗎?答案是否定的

  • 沒有return語句的函數只能用在返回類型是void的函數中,返回void的函數可以不要return函數
  • 只要函數的返回類型不是void,函數就必須有一個返回值,如果沒有返回值,可能導致控制流尚未返回任何值就結束了函數的執行,編譯器也無法檢查出這一錯誤
  • 不要返回局部對象引用或者指針,因為函數完成后,他們的存儲空間也隨之釋放掉
  • 這條規矩有一個例外,我們允許main()函數沒有return語句
  • 左值與右值

    一些語言使用左值(l-value)和右值(r-value)的概念。左值具有確定的、可以被獲得的內存地址。這意味著左值可以是變量,也可以是對指向特定內存地址的指針解引用(dereference)的結果。例如C語言的表達式(4 + 9),在執行時,計算機生成一個整數值13,但因為程序沒有明確指定這個13如何在計算機中存儲,所以這個表達式產生一個右值。另一方面,如果一個C程序聲明了一個變量x并將x賦值為13,那么表達式(x)的值是13,并且是一個左值

    調用一個返回引用的函數得到左值,其他返回類型得到右值

    特別的,我們能為返回類型是非常量引用的函數的結果賦值

    列表初始化返回值

    函數可以返回花括號包圍的值的列表,函數不能返回數組,但可以返回數組的指針

    總結

    以上是生活随笔為你收集整理的C++函数概念解析(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。