日期:2014-05-18  浏览次数:20717 次

C++角度看C#的函数参数传递
在C#中定义了一个Struct:

struct param
{
  public int name;
  public string address;
  public HashTable table;
}


我要将它作为一个函数参数传递, 有两种方法:
void fun1(param p)
{
}

void fun2(ref param p)
{
}

两种方法有什么区别吗?

第二种方法是不是效率高一些, 就像C++中的指针传递一样?


------解决方案--------------------
是啊,传递引用还不快啊。不过结构本身很简单的时候,这二者就接近了。

------解决方案--------------------
与效率无关,第一种方式,如果你在该函数内修改了这个参数,不会影响到实参原来的值,第二种方式,如果修改,实参本身也将发生变化。
------解决方案--------------------
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
------解决方案--------------------
第二种方式不允许null