zoukankan      html  css  js  c++  java
  • 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 }

      输出:

     

    二者的区别:

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

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

  • 相关阅读:
    qmake理解(还可以加入Lex Yacc文件)
    如何在Qt 4程序中优化布局结构(表格讲解,很清楚)
    QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)
    Qt工具知多少(一目了然)
    分享个人如何DIY网站的经验
    推荐10款免费而优秀的图表插件
    异步上传文件
    JSON.stringify 方法
    Value Object(值对象)如何使用 EF 进行正确映射
    领域驱动设计(DDD)
  • 原文地址:https://www.cnblogs.com/Roz-001/p/11050424.html
Copyright © 2011-2022 走看看