在C#中,当一个变量通过一个函数/方法时,原来的变量会改变吗?

乔伊

我对函数如何更改通过它传递的变量感到困惑。例如,如果我创建了一个变量 t = 1,并通过向其添加 2 来传递一个函数,在函数内部 t 是 3,但在 Main 函数中 t 仍然是 1:

static void Main(string[] args)
{
    int t = 1;
    addTwo(t);
    Console.WriteLine(t); 
    ## t=1
    Console.ReadLine();
}
static void addTwo(int t)
{
    t+=2;
    Console.WriteLine("inside function {0}",t); 
    ## t=3

函数内部 t 的值为 3,但 Main 中的值保持为 1。

但是,如果我创建了一个值为 {2,3,4,5,6} 的数组“幸福”并通过一个函数“SunIsShining”,它将每个值增加 2。之后,我认为数组幸福应该仍然是 {2 ,3,4,5,6}。然而它变成了{4,5,6,7,8}。

static void Main(string[] args)
{
    int[] happiness = { 2, 3, 4, 5, 6 };
    SunIsShining(happiness);
    ## happiness = { 4, 5, 6, 7, 8 }

    foreach (int y in happiness)
    {
        Console.WriteLine(y);
    }
    Console.ReadLine();
}
static void SunIsShining(int[] x)
{
    for (int i = 0; i < x.Length; i++)
        x[i] += 2;
}

谁能帮我理解原因?谢谢!

D-施

因为

  • int[]是一种可能将对象引用传递给函数的引用类型,因此您可以修改同一数组中的值。

  • int是一种值类型,它会在传递给函数之前克隆值,因此您修改的值不是t来自Main函数。

我们可以通过这个示例代码通过ReferenceEquals方法来证明,将比较对象引用是否与下面的相同,假设我们可以看到addTwo是 return false,但SunIsShining返回 true。

static int t1;
static int[] happiness;
static void Main(string[] args)
{
    t1 = 1;
    happiness = new int[]{ 2, 3, 4, 5, 6 };
    
    addTwo(t1);
    SunIsShining(happiness);
    
    Console.ReadLine();
}
static void addTwo(int t)
{   
    t+=2;
    Console.WriteLine("Is same object by value?" + object.ReferenceEquals(t1,t)); 
}

static void SunIsShining(int[] x)
{
    Console.WriteLine("Is same object by refer?" + object.ReferenceEquals(happiness,x)); 
}

c# 在线

更多信息我们可以看到

值类型

引用类型

传递参数

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过另一个线程读取变量-变量不会改变

即使只有 main 函数,在 main 函数之外声明一个变量也会改变输出

为什么在更新一个会话时不同的会话变量会改变值?

如何创建一个变量,该变量会改变单击项的功能?

使用一个函数但在另一个函数内部修改变量的最佳方法是什么?

我们可以在C中与变量一起声明一个函数吗?

改变一个变量的形式

我的程序中一个特别重要的变量不会改变

您如何制作一个会改变每次重载的变量?

为什么 Angular 4 ngModel 会改变另一个变量?

为什么在我的 Makefile 中包含一个文件会改变我的 Makefile-directory 变量?

我可以设置一个变量来改变使用 cout 时的 floatfield 吗?

使用class()方法时从函数中的另一个函数访问变量

制作一个每 3 秒改变一个变量的函数

左移一个字节会改变Java中的有符号位吗?

为什么Python中的一个变量来回转换后会回到原来的ID?

在另一个脚本中更改变量名称时打印错误

PYTHON:变量“a”在应用函数为另一个变量赋值时改变值,使得 b = func(a)

固定一个变量的值,该变量根据另一个变量而改变

在将变量用作Javascript函数中的参数之前,应该先声明一个变量吗?

根据其他几个变量改变一个变量

在一个函数中返回两个变量

如何从另一个Java类的方法中更改变量

在python中循环遍历一个函数,但是在调用函数数组中的一个函数时重新定义一个变量

如何在一个线程中修改变量并在另一个线程中检查变量?

根据r中另一个变量的时移生成一个变量

Python-Scrapy:通过另一个函数产生一个定义在一个函数中的变量名

在另一个类中调用一个通过IBaction读取动态变量的函数

应用函数时如何只获取一个变量