總結性的談一談函數傳參的知識。(c/c++初學的一定要看)

來源:互聯網
上載者:User

 聲明一下,本人不過菜鳥一個,有什麼理解上的錯誤,希望大家能指出。
    函數是最長用到的知識。試想一下,如果沒有函數,你的main函數可能長的連你自己都覺得不好意思。既然每個人都會經常使用函數,我們有必要好好的理解函數的知識。
    函數主要的知識點就是函數的聲明,定義,調用。
    今天主要講函數的定義和調用。先簡要的說一下聲明。當調用函數在定義函數之前就應當聲明一下告訴系統函數講在後邊定義。當在多檔案時也應在其他檔案外調用本檔案函數時在調用前聲明。聲明其實就是簡單的把定義函數的首部(傳回型別,函數名,形參類型)寫出來,以;結束。形參名可寫可不寫。但有特殊情況。我後邊再說!
    函數的定義大家最容易亂的就是行參和的類型與函數的傳回值。
    我總結了一下可分為幾種。

    1:以實參的副本形式。
    這種方式最容易理解,就是很多教程上所說的值傳遞。把實參的值複製給形參建立的局部對象。函數對形參做的改變不會影響到實參,因為他們是不同的對象。在討論一下這種情況下的const。因為形參和實參是不同的對象,唯一的聯絡只是調用時的值傳遞,所以形參和實參的const修飾沒有限制。常量也可以做為實參調用。但是聲明為const的形參,只能引用,不能改變他的值。這大家應該是知道的。

    2:以指標傳送地址的形式。

    這種方式最令C語言初學者頭疼。因為是指標所以傳遞的是地址。也就是說實參向形參傳遞的是實參所指向對象的地址。既然這樣,形參在函數中謝引用所改變的值,同時也改變了實參所指向對象的值,因為他們本身就是指象一個地址,即同一個對象。但因為函數調用所建立的局部形參指標,它也是實參指標的副本,所以當改變形參的指標值(即指向另一個對象)實參是沒有隨之改變的。
    討論一下這種情況下的const。
    當然傳送的是地址就肯定不能是常量了。有很多中情況。如果如果實參是指向非const型的,形參可以是指向const型的也可以是非const型的。當實參是指向const型的,形參也應該是指向const的。因為當在函數中改變了形參指標所指向的內容就是改變了實參指向的內容,但這顯然與形參是指向const型的相矛盾。當然我們知道c語言中函數名代表數組的首地址。所以實參同樣可以傳遞數組名。當然也可以通過取地址符來做實參傳遞地址。指向const的指標同樣只能引用,不能改變指向內容的值。

    3:以引用形式,即和實參的對象相關聯。
    引用是c++中才能見到的知識點。引用大家都很清楚是一個對象的別名,也就是說把引用名和一個對象相關聯,他們是同一塊記憶體空間的名字。既然這樣。當形參定義成引用時很容易就能理解為什麼函數中對引用的改變同時也是對實參的改變。
    討論一下這種情況的const
    當形參是非const型的引用。實參不能是const型的對象。大家看完指標的部分應該就能理解這裡。同樣不能用常量值來做為實參。也不能用需要轉換的類型的對象來做實參。只能用完全同類型的非const對象來做實參。但當形參為const型的引用時可以用非const對象做實參,也可以用常量來做。
  
    還要補充幾點:
    1。傳遞指向指標的引用。
     形參定義為int *&a
     a是一個指標。與實參的指標相關聯。函數中改變了a的值,就是改變了實參指標的指向。

    2。通過引用傳遞數組。平時我門都是傳遞數組的地址。形參作為指標來通過解操作符(*)引用數組元素。或是傳遞數組地址。形參同樣是數組名來接收。
    但是通過引用傳遞數組是傳遞實參數組本身。所以形參的大小也要匹配。如 int (&arr)[10]

   
    從代碼效率上來看。如果是以實參的副本形式傳遞。那過程效率是相對低一些。他要建立新的對象。來接受實參傳來的值。用指標相對來說好一些。尤其在傳遞類類型時,畢竟函數調用時建立的臨時指標。只佔4位元組。當為引用形式時效率就很高了,因為他就是實參本身。當傳遞類類型時,如果類類型sizeof()的值很大。用複製實參的形式雖然可以,但是效率太低,但如果用引用我認為是非常好的辦法,但前邊說了,如果形參是非const型引用,實參是有要求的,所以如果不改變型參值的話一般定義為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.