導航:首頁 > 源碼編譯 > 編譯原理傳值和傳地址的區別

編譯原理傳值和傳地址的區別

發布時間:2022-08-08 14:53:38

『壹』 傳值調用與傳地址調用有什麼區別,怎麼理解

傳值和傳地址的概念主要在於內存指針上。但換種方法更容易理解。

傳值:將傳遞的形參變數在內存中做一個拷貝,然後傳遞給函數,所以不管在函數中怎麼變化都不會改變原來的內容。

傳地址(傳指針):將形參變數在內存中的地址告訴函數,所以在函數中的變化將影響原來的內容

『貳』 在c語言中給一個變數賦值與賦地址的區別

1、傳遞的變數值不同

兩者其實傳遞的都是一個內存單元的內容。不同的是,值傳遞的內容是一個變數的值,得到這個值後,對這個值得修改不能改變原變數的值;而地址傳遞的是一個變數的地址,得到傳遞的地址值後,可以通過這個地址直接訪問地址對應的那個變數,進而修改那個變數的值。

2、傳遞的途徑不同

值傳遞只是將變數的內容復制一份而已,函數進行操作的其實是另一個變數,只是另一個變數的值和傳遞的變。賦地址相當於間接操作就相當於知道了這間房子的具體位置去找裡面的主人而賦值是直接去根據主人名字去找它。

3、傳遞的函數不同

賦地址inta=10,b;給變數賦值就是b=a;但是賦地址就不行因為地址只能賦給指針變數應在上面基礎上加char*p;把a的地址給p就是p=&a;地址只能存在指針變數中變數賦值,是可以給變數賦一個相同類型的任意的數據,而變數的地址是系統在內存隨機分配的,不能更改。並且只有指針變數才能賦地址值。

給變數賦地址這個變數要為指針變數int*p,b;*p=&b;給變數賦值只要類型相同就行。其實都是一樣,都是給一個數據,地址也是一個數值而已給變數賦值是復制一個數如:inta=1b;b=a;則變數b被賦值為a的值,但是賦地址得用指針,因為指針的定義就是地址的意思。

『叄』 傳值和傳地址有什麼區別有時交換後值改變了但有時又沒有。

傳值,只能使用當前對象傳過來的值,但是無法改變當前對象
地址,可以使用當前對象,也能改變當前對象
引用和傳遞地址貌似差不多,只是說法不太一樣,個人理解

『肆』 C語言中傳值和傳地址有什麼差別,怎麼用的

傳值的意思就是告訴你某些參數當前取值是多少,請處理
傳地址的意思就是告訴你需要將處理過的數據可以存放到這些地址存儲的變數中,以便調用者使用。
傳值的舉例:y=sin(30/180*PI); 這里就是要求sin函數計算30度的正弦值,返回值就是結果,參數用一下就可以了,也可以:x=30; x/=180; x*=PI; y=sin(x);
傳指針的舉例:int a[10],i; input(a,10); sort(a,10);在input函數中進行鍵盤輸入,輸入的值放到數組a中,這樣就需要傳送數組a的首地址,而第2個參數通知input該數組有10個元素需要輸入,這個10就是前面的傳值的用法;同理排序程序需要改變a數組中各數據的位置,也就是要sort函數幫助修改a數組的內容,所以也需要傳指針。傳指針的辦法一般是在函數要返回的數據並非簡單變數類型時使用,比如數組、結構、混合數據等。

『伍』 C語言中傳值與傳址有什麼區別

傳值不改變實參的值,改變形參的值。傳地址改變實參的值。望採納

『陸』 如何區分傳值與傳址

就一般而言,值傳遞時使用的是
局部變數
,地址傳遞時使用的是
全局變數
。另,要搞懂這個問題建議你讀一下《匯編語言設計》與《
編譯原理
》。

『柒』 PHP傳值和傳引用,傳地址的區別

傳值和傳引用、傳地址的區別:
1、傳值,是把實參的值賦值給行參
那麼對行參的修改,不會影響實參的值
2、傳地址

是傳值的一種特殊方式,只是他傳遞的是地址,不是普通的如int
那麼傳地址以後,實參和行參都指向同一個對象
3、傳引用

真正的以地址的方式傳遞參數
傳遞以後,行參和實參都是同一個對象,只是他們名字不同而已
對行參的修改將影響實參的值

『捌』 傳值和傳址的區別值類型和引用類型的區別

1.值類型(ValueType)

值類型包括:數值類型,結構體,bool型,用戶定義的結構體,枚舉,可空類型。

值類型的變數直接存儲數據,分配在託管棧中。變數會在創建它們的方法返回時自動釋放,例如在一個方法中聲明Char型的變數name=』C』,當實例化它的方法結束時,name變數在棧上佔用的內存就會自動釋放

C#的所有值類型均隱式派生自System.ValueType。

結構體:struct(直接派生於System.ValueType)。
數值類型:整型,sbyte(System.SByte的別 名),short(System.Int16),int(System.Int32),long(System.Int64),byte(System.Byte),ushort(System.UInt16),uint(System.UInt32),ulong(System.UInt64),char(System.Char)。
浮點型:float(System.Single),double(System.Double)。
財務計算的高精度decimal型:decimal(System.Decimal)。
bool型:bool(System.Boolean的別名)。
用戶定義的結構體(派生於System.ValueType)。
枚舉:enum(派生於System.Enum)。

可空類型(派生於System.Nullable<T>泛型結構體,T?實際上是System.Nullable<T>的別名

2.引用類型(ReferenceType)

引用類型包括:數組,用戶定義的類、介面、委託,object,字元串,null類型,類。

引用類型的變數持有的是數據的引用,數據存儲在數據堆,分配在託管堆中,變數並不會在創建它們的方法結束時釋放內存,它們所佔用的內存會被CLR中的垃圾回收機制釋放。

數組(派生於System.Array)
用戶需定義以下類型:
類:class(派生於System.Object);
介面:interface(介面不是一個「東西」,所以不存在派生於何處的問題。介面只是表示一種contract約定[contract])。
委託:delegate(派生於System.Delegate)。
object(System.Object的別名);
字元串:string(System.String的別名)。

3.值類型與引用類型區別:

4.內存分配

值類型的實例經常會存儲在棧上的。但是也有特殊情況。如果某個類的實例有個值類型的欄位,那麼實際上該欄位會和類實例保存在同一個地方,即堆中。不過引用類型的對象總是存儲在堆中。如果一個結構的欄位是引用類型,那麼只有引用本身是和結構實例存儲在一起的(在棧或堆上,視情況而定)。

引用類型在棧中存儲一個引用,其實際的存儲位置位於託管堆。簡稱引用類型部署在託管推上。值類型總是分配在它聲明的地方:作為欄位時,跟隨其所屬的變數(實例)存儲;作為局部變數時,存儲在棧上。值類型在內存管理方面具有更好的效率,並且不支持多態,適合用做存儲數據的載體;引用類型支持多態,適合用於定義 應用程序的行為。

註:堆棧(stack)是一種後進先出的數據結構。在內存中,變數會被分配在堆棧上來進行操作。堆(heap)是用於為類型實例(對象)分配空間的內存區域,在堆上創建一個對象,會將對象的地址傳給堆棧上的變數(反過來叫變數指向此對象,或者變數引用此對象)。

5.裝箱和拆箱

1)裝箱就是將一個值類型轉換成等值的引用類型

在堆上為新生成的對象(該對象包含數據,對象本身沒有名稱)分配內存。

將堆棧上值類型變數的值拷貝到堆上的對象中。

將堆上創建的對象的地址返回給引用類型變數(從程序員角度看,這個變數的名稱就好像堆上對象的名稱一樣)。

2)拆箱就是將一個引用類型轉換成等值的值類型

將引用類型變數堆上的值拷貝到棧上面。

總結

值類型和引用類型理解透徹後,我們知道C#裡面是值傳遞,但是有些變數是引用類型的,在傳遞和拷貝時需要特別注意。方法傳遞參數時加上ref(out),為引用傳遞參數。

值傳遞僅僅傳遞的是值,不影響原始值。
引用傳遞,傳遞的是內存地址,修改後會改變內存地址對應儲存的值。

『玖』 C語言的值傳遞和地址傳遞有啥區別

兩者其實傳遞的都是一個內存單元的內容。不同的是,值傳遞傳遞的內容是一個變數的值,得到這個值後,對這個值得修改不能改變原變數的值;而地址傳遞傳遞的是一個變數的地址,得到傳遞的地址值後,可以通過這個地址直接訪問地址對應的那個變數,進而修改那個變數的值。

閱讀全文

與編譯原理傳值和傳地址的區別相關的資料

熱點內容
如何理解php面向對象 瀏覽:96
macword轉pdf 瀏覽:848
python列表求交集 瀏覽:873
解壓包如何轉音頻 瀏覽:447
機明自動編程軟體源碼 瀏覽:325
php埠號設置 瀏覽:541
phperegreplace 瀏覽:320
androidgridview翻頁 瀏覽:537
ssh協議編程 瀏覽:635
如何開我的世界電腦伺服器地址 瀏覽:861
玄關pdf 瀏覽:609
程序員學習論壇 瀏覽:940
程序員的毒雞湯怎麼做 瀏覽:548
安卓怎麼降級軟體到手機 瀏覽:281
雲與伺服器入門書籍推薦產品 瀏覽:636
delphi編程助手 瀏覽:763
電腦遇到伺服器問題怎麼辦 瀏覽:515
加工中心編程結束方法 瀏覽:296
了解什麼是web伺服器 瀏覽:140
面向對象的編程的基本特徵 瀏覽:718