From Java to C++ 第三篇

前敘

From Java to C++ 第一篇
From Java to C++ 第二篇

風格逆轉(zhuǎn)

前面兩篇,以java代碼實例的對比,來做了快速的C++轉(zhuǎn)型,但其實那樣根本不夠,因為在任何一門語言里,最終拼的都是細節(jié)處理,為什么C++這么的難學,其實也是細節(jié)夠多,知識點夠復雜導致的,所以接下來我們就針對C++中,也是相對java所特有的一些特性,逐一學習,當然也會有對應的代碼舉例,來輔助理解。
大家都知道Java中有值傳遞和引用傳遞,但在C++中,又多了個指針傳遞,這到底是怎么回事呢?下面就一起一探究竟。

值傳遞

image.png

特點:

  • 形參是實參的拷貝,改變形參的值并不會影響外部實參的值。
  • 當函數(shù)內(nèi)部需要修改參數(shù),并且不希望這個改變影響調(diào)用者時,采用值傳遞。

指針傳遞

image.png

特點:

  • 形參為指向?qū)崊⒌刂返闹羔?,當對形參的指向操作時,就相當于對實參本身進行的操作
  • 方法里,用*a 操作指針
  • 調(diào)用方法時,需用&修飾實參

為什么用&修飾實參

這就跟&和*在修飾變量名時的作用有關(guān)

  • &b 取b的值地址,它被定義為取地址運算符
  • a 取a的值 ,它被定義為間接尋址運算符,*返回操作數(shù)所指定地址的變量的值

在指針傳遞中,傳入地址&b,然后在該函數(shù)中,通過*a取出&b的地址的值,再進行相關(guān)操作。有點繞,但還算可以理解。

引用傳遞

image.png

特點:

  • 形參相當于是實參的“別名”,對形參的操作其實就是對實參的操作
  • 行參作為局部變量在棧中開辟了內(nèi)存空間,并指向?qū)崊⒆兞康牡刂?/li>
  • 對形參做的任何操作都影響實參變量

指針和引用的區(qū)別

指針和引用都可以通過行參改變實參的值,那么它們到底什么區(qū)別呢?
其實這個跟引用規(guī)則有很大的關(guān)系,來看下引用的規(guī)則:

  • 引用被創(chuàng)建是必須初始化
  • 不能有NULL引用
  • 一旦應用被初始化,就不能改變引用關(guān)系

而指針以上規(guī)則都沒有限制,那是為什么呢?其實指針傳遞本質(zhì)上是值傳遞的方式,它所傳遞的是一個地址值。其實很多人對這個都不太好理解,你可以這么理解,我們都知道Java多線程中,操作共享內(nèi)存的變量時,其實都是從共享內(nèi)存中copy到自己的內(nèi)存區(qū)域中,相當于一個副本,最終操作完以后再同步到共享內(nèi)存中,達到一個閉環(huán),你可以這么理解指針,但它原理并不是我說的這樣,僅供輔助理解。

該如何選擇

你可以將指針作為更加靈活的引用使用,當不滿足引用規(guī)則的時候就使用指針,就這樣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 作為一個java開蒙的程序狗,深刻感受到C++的萬惡。二話不說,代碼開題。testParam.cpp main.c...
    YocnZhao閱讀 1,187評論 0 1
  • 寫在前面: 猶豫了一下,不知道該不該發(fā)這么多。畢竟題目雖全,但是其實很多人看了不到一半,估計就會默默的收藏保存,等...
    Yt_cc閱讀 14,927評論 1 6
  • c++學習文檔匯總 [TOC] c++ primer部分 c++學習筆記 引用(左值引用) int &ref...
    flyrain閱讀 477評論 0 0
  • 哈嘍,大家好。最近幾天,我把去年秋招總結(jié)的筆試面試的一些內(nèi)容,又進行了重新規(guī)劃分類。詳細分成了簡歷書寫,面試技巧,...
    3561cc5dc1b0閱讀 745評論 0 1
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,848評論 28 54

友情鏈接更多精彩內(nèi)容