苏飞论坛

标题: C#函数-形参与实参 [打印本页]

作者: wwwconsumer    时间: 2014-7-8 05:30
标题: C#函数-形参与实参
如果把函数比作是你设计的工厂,那么函数的参数就好比你提供给工厂的原料,函数在定义时的参数是形式参数(简称为形参),调用函数时的参数称为实际参数(简称为实参),实参可以是变量、常量、或表达式,实参与形参必须类型相同或兼容。初学者不太理解形参与实参的关系,特别是形参与实参如何传递,下面讲例子:
[C#] 纯文本查看 复制代码
namespace ConsoleApplication1
{
class Program
{
static double Bigger(double x, double y)//形参x y
{
double maxValue = (x >= y) ? x : y;
return maxValue;
}
static void Main(string[] args)
{
double a = Convert.ToDouble(Console.ReadLine());
double b = Convert.ToDouble(Console.ReadLine());
double result = Bigger(a, b);//实参a b
Console.WriteLine("最大值是:{0}", result);
}
}
}

这里程序启动时,先执行主函数内的语句,当遇到Bigger()函数时,转向执行Bigger()内的语句,Bigger()内的语句执行完毕后,返回主函数继续执行。
执行Main()主函数,double result = Bigger(a, b);   //调用函数Bigger();
执行Bigger()函数,double x=a; double y=b;       //把参数ab的值传递给形参xy,以便函数运算
                              double maxValue =(x>=y)?x:y;
                              return maxValue;
执行Main()主函数,double result = Bigger(a,b); //返回主函数,将返回值赋给变量result.
在调用函数Bigger()时,发生了从实参到形参的数据传递,程序首先为形参xy分配了内存空间,并把实参ab的值复制一份到形参中让函数Bigger()加工,这种参数传递方式称为值传递,实参ab与形参xy是互不相同的变量,他们都有自己的内存空间,当值传递完成之后,他们之间是互不相关的量,形参的变化不会影响到实参。

作者: wwwconsumer    时间: 2014-7-8 05:56
本帖最后由 wwwconsumer 于 2014-7-8 05:59 编辑

下面这个例子,更有助于理解形参与实参之间的关系,就是设计一个交换数值的函数,看看形参与实参之间如何互相影响的。
[C#] 纯文本查看 复制代码
namespace ConsoleApplication1
{
    class Program
    {
        static void Swap(int x, int y)//交换变量的函数
        {
            int temp = x;
            x=y;
            y = temp;//这个过程就是设计一个空罐temp,然后将形参x、y值倒入空罐temp中达到交换x、y的值的目的
        }
        static void Main(string[] args)
        {
            int  a = Convert.ToInt32(Console.ReadLine());
            int b = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("交换前:a={0},b={1},", a,b);
            Swap(a, b);//调用交换函数,传入实参a\b的值
            Console.WriteLine("交换后:a={0},b={1}",a,b);
        }
    }
}

你运行上述程序后,发现你输入的实参a和b在交换前后都没有变化, (, 下载次数: 87)