输出参数out和引用参数ref区别

使用ref的一段代码

using System;
class M
{
public void F(ref int i)
{
i=3;
}
}
class Test
{
int i=0; //要作为引用参数传递的变量必须明确赋值
static void Main()
{ //不能把int i=0;放在这里赋值,会报错说Test不包含i定义。
Test t=new Test();
Console.WriteLine("the value of i is:{0}",t.i);
M mm=new M();
mm.F(ref t.i); //作为引用参数传递
Console.WriteLine("now the value of i is :{0}",t.i); //i的值改变
}
}

使用out的一段类似代码

class M
    {
        public void F(out int i) //这个方法和ref的方法都是一样,没什么不同
        {
            i = 8; //返回前必须明确赋值
        }
    }
    class Test
    {
        int i; //不用赋初值,这就是out和ref的区别,但声明还是要的
        public static void Main()
        {
            Test t1 = new Test();
            Console.WriteLine("the value of i is :{0}", t1.i); //输出是0;
            M m1 = new M();
            m1.F(out t1.i); //i作为输出参数传递 ,输出是8
            Console.WriteLine("now value of i is :{0}", t1.i);
        }
    }

时间: 2024-09-17 22:24:18

输出参数out和引用参数ref区别的相关文章

深入剖析引用参数Ref和Out

学过C/C++的人,对C#的关键字Ref和Out应该都很好理解.它们都提供了一种可以在被调用函数内修改传递的参数的值的方法.因为这一功能很类似C/C++的指针.对于没学过C/C++的,也应该可以明白这两个参数的作用. 虽然Ref和Out都提供了修改参数值的方法,但它们还是有一点点小的区别.1.Ref在作为参数调用函数之前,变量一定要赋值,否则会得到一个常规编译错误:使用了未赋值的变量.2.在被调用函数内,以Ref引入的参数在返回前不必为它赋值.3.Out在作为参数调用函数之前,变量可以不被赋值.

引用参数和传值参数的区别深入解析

以下是对引用参数和传值参数的区别进行了详细的分析介绍,需要的朋友可以过来参考下   1. 我们都知道,普通的传值参数是由行参传给实参: 编译器在函数内部为每一个参数产生一个临时变量,将每一个参数压入栈(stack)中,将实参的数值保存到临时变量中. 所以才有在低端8位机中,对参数的数量有比较严格的限制,因为栈的深度非常有限:当然,在通用机上也有同样的问题,参数过多不合适,但通用机的栈的深度比低端机大多了: 2. 引用做参数传递的是变量的地址: 实质上传递的是变量的指针: 引用作为参数的好处是减少

C#的引用参数和值参数

引用参数和值参数 在前面的函数学习中,所有函数的参数都是有值参数:在使用参数的时候把一个值传递给函数使用的一个变量.在函数中对此变量的任何修改都不会影响函数调用中指定的参数.还是举例说明比较好: static void doDouble(double mynum) { mynum *= 2; Console.WriteLine("mynum in 函数中doDouble{0}", mynum); } static void Main(string[] args) { Console.W

c语言 二叉树-CreateBiTree函数参数为什么把引用符号去掉 就不能运行啊?*&是怎么用的说?

问题描述 CreateBiTree函数参数为什么把引用符号去掉 就不能运行啊?*&是怎么用的说? #include #include typedef struct Node //二叉树结构定义 { char data; struct Node *lchild; struct Node *rchild; }Bitree; void CreateBiTree(Bitree *&t) //先序遍历创建二叉树 { char s; scanf("%c",&s); if(s

《从缺陷中学习C/C++》——6.14 正确使用引用参数和引用返回值

6.14 正确使用引用参数和引用返回值 从缺陷中学习C/C++代码示例 int &add(int n, int m) { n = n + m; return n; } int main() { int i = 10; int b = add(i, 1); cout << b << endl; return 0; } 现象&后果预期的输出结果是11,但实际输出的结果不确定. Bug分析add函数是一个函数引用,而add函数的返回值是形参n,形参是函数内的局部变量,函数

《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用

 原创文章,欢迎转载.转载请注明:关东升的博客   参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以引用方式传递,这也是可以实现的,Swift提供的inout关键字就可以实现.看下面的一个示例: func increment(inout value:Double, amount:Double = 1.0) { value += amount } var value : Double =

未引用参数,添加任务栏命令及其它

我看到过一些 C++ 代码针对没有使用过的参数用 UNREFERENCED_PARAMETER,例如: int SomeFunction(int arg1, int arg2) { UNREFERENCED_PARAMETER(arg2) ... } 我还看到过这样的代码: int SomeFunction(int arg1, int /* arg2 */) { ... } 你能解释它们的差别吗?哪一种用法更好? Judy McGeough 是啊!为什么呢?让我们从 UNREFERENCED_P

语言 正弦波-输出正弦波,根据函数参数变化振幅、周期和字符

问题描述 输出正弦波,根据函数参数变化振幅.周期和字符 详细的看图 解决方案 把这些当作参数传递就是void outsin(char c int rowint col);振幅 colT周期 rowc字符正弦函数一个周期是 0~2pi峰值是1,也就是说,值域是 -1-1,

数据结构-抽象数据类型的定义中的“引用参数”怎么理解

问题描述 抽象数据类型的定义中的"引用参数"怎么理解 InitTriplet(&Tv1v2v3) 初始条件: 操作结果:用e值取代三元组T的第i个元素 DestroyTriplet(&T) 初始条件:三元组T已经存在. 操作结果:销毁三元组T. Get(Ti&e) 初始条件:三元组T已经存在,1<=i<=3 操作结果:用e返回三元组T的第i个元素. Put(&Tie) 初始条件:三元组T已经存在,1<=i<=3 操作结果:用e值取