C#數組按值和按引用傳遞數組區別

C#中,存儲數組之類對象的變量並非實際存儲對象自己,而是存儲對象的引用。按值傳遞數組時,程序將變量傳遞給方法時,被調用方法接受變量的一個副本,所以在被調用時試圖修改數據變量的值時,並不會影響變量的原始值;而按引用傳遞數組時,被調用方法接受的是引用的一個副本,所以在被調用時修改數據變量時,會改變變量的原始值。下面一個例子說明以下:數組

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Array
{
    class Program
    {
        public static void FirstDouble(int[] a)
        {
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = a[i] * 2;
            }

            a = new int[] { 11, 12, 13 };
        }

        public static void SecondDouble(ref int[] a)
        {
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = a[i] * 2;
            }
            a = new int[] { 11, 12, 13 };
        }

        public static void OutputArray(int[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine("{0}", array[i]);
            }
            //Console.WriteLine("\n");
        }

        static void Main(string[] args)
        {
            int[] array = { 1, 2, 3 };
            Console.WriteLine("不帶ref關鍵字方法調用前數組內容:");
            OutputArray(array);
            FirstDouble(array);
            Console.WriteLine("不帶ref關鍵字方法調用後數組內容:");
            OutputArray(array);
            int [] array1={1,2,3};
            Console.WriteLine("帶ref關鍵字方法調用前數組內容:");
            OutputArray(array1);
            SecondDouble(ref array1);
            Console.WriteLine("帶ref關鍵字方法調用後數組內容:");
            OutputArray(array1);
            Console.ReadLine();
        }
    }
}

運行結果以下圖:spa

image

注意的是:調用帶ref關鍵字的方法時,參數中也要加ref關鍵字。3d

相關文章
相關標籤/搜索