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 }

输出:

二者的区别:

值传递时,系统首先为被调用方法的形参分配内存空间,并将实参的值按位置一一对应地复制给形参,此后,被调用方法中形参值得任何改变都不会影响到相应的实 参;

引用传递时,系统不是将实参本身的值复制后传递给形参,而是将其引用值(即地址值)传递给形参,因此,形参所引用的该地址上的变量与传递的实参相同,方 法体内相应形参值得任何改变都将影响到作为引用传递的实参。

优质内容筛选与推荐>>
1、python nose测试框架全面介绍十一---用例的发现
2、ASP.NET MVC - 模型与元数据(进阶)
3、Poj--1061(拓展欧几里得)
4、[转] 英语飙升的好方法
5、数据库语句(二)——查询


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn