C#_函數參數的值傳遞和引用傳遞筆記


函數參數的值傳遞和引用傳遞筆記

      首先C# 是完全面對對象的高級語言 。 主要有2種基礎數據類型且都繼承於Object,都在C++的基礎上做了封裝,都有着類似C++類對象

的感覺。這2種基礎數據類型的互相轉換會造成裝箱和拆箱操作這里就不做過多說明了)。

    值類型包含:數值類型int  float  等),bool , 枚舉, 結構體 ,可空類型等;

    引用類型包含:數組 (Array),Class ,接口 ,object ,字符串等;

   一:值傳遞做參數傳遞進入函數

      會在函數體類創造一個新的拷貝來進行操作,不影響原有數據類型中的值。

 

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 
 5 public class Test_Script : MonoBehaviour 
 6 {
 7     public int num = 10;
 8 
 9     public void Start () 
10     {
11         Add(num);
12         num--;
13         Debug.Log("num :" +num);
14     }
15 
16     public void Add(int _num)
17     {
18         _num++;
19         Debug.Log("_num :" +_num);
20     }
21 
22 }

  運行效果。

  二:引用傳遞做參數傳遞進入函數

      只是復制這個對象本身,即復制其地址值,而不是它指代的對象。

      (注意修改指向地址的值原本的值也會改變,所以引用傳遞其實是引用類型的地址不同,指向的地址相同【跟C++中的指針概念很像】)。

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace CSharp_Script
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13            int[] intArray = new int[] { 123, 123, 123, 123, 123 };
14            string str =  "hello,world" ;
15 
16 
17            Set(intArray, str);
18 
19             //輸出原來的值
20            for (int i = 0; i < intArray.Length; ++i)
21            {
22                Console.WriteLine("intArray[" + i.ToString() + "] :" + intArray[i].ToString());
23            }
24 
25            Console.WriteLine("str" + str);
26 
27            Console.ReadKey();
28         }
29 
30         //設置改變原來的值
31         public static void Set(int[] _intArray, string _str)
32         {
33             for (int i = 0; i < _intArray.Length; ++i)
34             {
35                 _intArray[i]++;
36                 Console.WriteLine("_intArray[" + i.ToString() + "] :" + _intArray[i].ToString());
37             }
38 
39             _str = "world,hello";
40 
41             Console.WriteLine("_str" + _str);
42         }
43     }
44 }

 

  輸出:

 

 

 

 

二者的區別:

    值傳遞時,系統首先為被調用方法的形參分配內存空間,並將實參的值按位置一一對應地復制給形參,此后,被調用方法中形參值得任何改變都不會影響到相應的實 參;

    引用傳遞時,系統不是將實參本身的值復制后傳遞給形參,而是將其引用值(即地址值)傳遞給形參,因此,形參所引用的該地址上的變量與傳遞的實參相同,方 法體內相應形參值得任何改變都將影響到作為引用傳遞的實參。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM