中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何淺析C++函數參數與Java傳遞比較

發布時間:2021-10-27 18:08:35 來源:億速云 閱讀:132 作者:柒染 欄目:編程語言

本篇文章給大家分享的是有關如何淺析C++函數參數與Java傳遞比較,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

對于C++函數參數與Java傳遞比較的問題,相信這是許多技術人員和一些開發人員的頭疼的一塊心病。

先說Java,先做幾點說明:

在Java中,無非就是兩種類型,即基本類型和從Object繼承下來的對象類型,而對象類型又包括String這種一旦初始化就不可改變內容的類型和BufferString這種可以初始化后可以改變內容的類型。然后看一下代碼示例:

public class Test {   public static void main(String args[]) {    Integer interger1, interger2;    int i, j;    interger1 = new Integer(10);    interger2 = new Integer(50);    i = 5;    j = 9;    System.out.println("Before Swap, Interger1 is " + interger1);    System.out.println("Before Swap, Interger2 is " + interger2);    swap(interger1, interger2);    System.out.println("After Swap Interger1 is " + interger1);    System.out.println("After Swap Interger2 is " + interger2);    System.out.println("Before Swap i is " + i);    System.out.println("Before Swap j is " + j);    swap(i, j);    System.out.println("After Swap i is " + i);    System.out.println("After Swap j is " + j);     StringBuffer sb = new StringBuffer("I am StringBuffer");    System.out.println("Before change, sb is <" + sb + ">");    change(sb);    System.out.println("After change sb is <" + sb + ">");   }    public static void swap(Integer ia, Integer ib) {    Integer temp = ia;    ia = ib;    ib = temp;   }

這很好解釋,對于基本類型諸如int,傳遞進去的是存放int值的“內存單元”的一個copy,所以函數swap里面的int和外面的int根本就不是一個東西,當然不能反射出去影響外面

的int。而對于對象類型,我們同樣可以這樣認為,C++函數參數傳遞進去的是存放對象類型的指針的“內存單元”一個copy(雖然Java里面沒有指針的概念,但這并不妨礙我們理解)。這樣,在swap函數里面,對其指針本身的值做任何操作當然不會影響外面的Integer,因為interger1和interger2的“內存單元”里面的值是不變的,其指向的對象類型也是沒有變的。

然后這里需要說明一個問題,就是StringBuffer這種類型的對象了。因為其內容是可以改變的,所以change函數里面的“指針”通過類似“*”的操作,改變了StringBuffer對象的本身,就顯而易見了。(StringBuffer對象本身只有一個副本)然后說C++了,里面的基本類型的諸如int的值傳遞大家都了然于胸,就不在這里廢話了。

然后另一種值傳遞可以稱為指針引用傳遞(pass-by-value argument of pointer)(這個類似上文說的Java中的對象類型的值傳遞),可以通過*操作,改變指針指向的值。示例程序如下,一看便知:

#include<iostream.h>  int main(){   void test(int*, const char*);   int i = 1;   int* iptr = &i;   cout<<"Before pass-by-value:"<<"\n\n";   cout<<"i = "<<i<<", It's value of i"<<endl;   cout<<"&i = "<<&i<<", It's address of i and value of iptr"<<endl;   cout<<"*iptr = "<<*iptr<<", It's value of i"<<endl;   cout<<"iptr = "<<iptr<<", It's value of iptr and address of i"<<endl;   cout<<"&iptr = "<<&iptr<<", It's address of iptr-self"<<"\n\n";      test(iptr, "pass-by-iptr");    test(&i, "pass-by-&i");    return 0;  }

這里的引用(reference)說的明白一些,就是C++函數參數被傳遞參數的一個別名,或者更直接的理解就是被傳遞參數自己了,只是名字不同而已。那么既然自己都被pass過去了,那當然可以在function里面為所欲為了。

以上就是如何淺析C++函數參數與Java傳遞比較,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

察雅县| 钦州市| 芜湖市| 岑溪市| 兴业县| 淮北市| 嫩江县| 察隅县| 龙州县| 洛扎县| 阳西县| 陵水| 昌邑市| 奉贤区| 两当县| 睢宁县| 台北市| 乌拉特中旗| 泌阳县| 伊通| 海口市| 二连浩特市| 年辖:市辖区| 固安县| 罗定市| 聂拉木县| 泸定县| 洮南市| 静宁县| 西乌珠穆沁旗| 仙桃市| 龙里县| 临桂县| 宜兰县| 大新县| 乾安县| 静乐县| 徐汇区| 泽库县| 信丰县| 巍山|