C、C++和C#中如何改变实参

C语言中:

在函数的执行过程中形参的改变通常不会影响相应的实参(由于传值调用,及函数的封闭性)。

如:

#include <stdio.h>
void swap(int x, int y)
{
     int temp;
     temp = x;
     x = y;
     y = temp;
}
void main()
{
     int m = 10, n = 20;
     printf("%d,%d\n", m, n);
     swap(m, n);
     printf("%d,%d\n", m, n);
}

程序的输出为:

10,20
10,20

swap函数并没有改变实参的值。

利用指针变量,可以改变实参的值。

#include <stdio.h>
void swap(int *x, int *y)
{
     int temp;
     temp = *x;
     *x = *y;
     *y = temp;
}
void main()
{
      int m = 10, n = 20;
      printf("%d,%d\n", m, n);
      swap(&m, &n);
      printf("%d,%d\n", m, n);
}

程序的输出为:

10,20
20,10

C++中:

C++兼容C语言,因此上面的示例在C++中有同样的输出。为了快速地改变实参的值,C++中引入了引用变量的概念。引用变量并不像其它变量那样有自己的存储单元,引用变量只是其它变量的别名。引用变量多用于函数的形参,当函数的形参为引用变量时,在函数体中改变形参也就改变了实参的值。注意其与指针变量在使用上的区别。

#include <stdio.h>
void swap(int &x, int &y)
{
     int temp;
     temp = x;
     x = y;
     y = temp;
}
void main()
{
     int m = 10, n = 20;
     printf("%d,%d\n", m, n);
     swap(m, n);
     printf("%d,%d\n", m, n);
}

10,20
20,10

C#中:

C#中没有了指针变量,但它引入了引用类型的概念。引用类型的实质为是指针类型,它的用法同C++中的引用变量。

如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleTest
{
    class Test
    {
        public int i = 5;
    }
    class Program
    {
        static void swap(Test x)
        {
            x.i = 6;
        }
        static void swap(int y)
        {
            y = 6;
        }
        static void Main(string[] args)
        {
            //引用类型
            Test b = new Test();
            Console.WriteLine("{0}", b.i);
            swap(b);
            Console.WriteLine("{0}", b.i);
            //值类型
            int m = 5;
            Console.WriteLine("{0}", m);
            swap(m);
            Console.WriteLine("{0}", m);           
        }
    }
}

程序的输出:

5
6
5
5

可见作为引用类型的类变量做形参时,如果在函数中改变则实参也会改变,而作为值类型的普通整型变量没有受到影响。

需要注意的是C#中对String类的变量区别对待,这也是为什么会有StringBuilder类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值