http://www.cnblogs.com/mdnx/archive/2012/09/04/2671060.html

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
class Program
{
/* 先来了解一下什么是实参, 什么是形参.
所谓形参其实也就是说函数定义的时候所带的参数. 比如 static void Myfuntion(int i , int t) 其中 int i and int t 都是形参.
* 而实参呢? 实参代表的是将要传入函数里面进行运算的两个参数, 可以是变量,也可以是常量.只要与形参类型相同即可*/ // 函数分为传值与传址两种方式. 传值不影响实参的数据,传址则会影响实参的数据. 下面用几段代码来示例
//在使用传值或者传址的选择上应当遵循这样一个规则.
//1. 传值是将形参的内容复制一份给实参.
//2. 传址是将形参与实参同时指向一个地址.
//如果在数据较大的情况下使用传值的方式必然会影响程序性能, 所以当数据较大时可以使用传址的方式.使用传址的方式会让程序的效率大大提升.
static void Myfuntion(int i , int t) //这个函数将以传值的方式运行
{
if (i > t)
i += ;
else
t += ;
} static void Myfuntion1(ref int i, ref int t) // 这个函数将会以传址的方式进行运算. 因为前面加了ref关键字, 函数只要加了ref关键字就会是以传址的方式进行运算
{
if (i > t)
i += ;
else
t += ;
} static void Myfuntion2(int[] array) //这里注意, 这个函数没有带ref关键字, 但是也是以传址的方式进行运算. 因为在C#中,引用类型都是以传址的方式进行运算,而array属于数组, 数组又属于引用类型,所以....
{
for (int i = ; i < array.Length; i++)
{
array[i] = ;
}
} static void Myfuntion3 (int i , int t , out int s) //这个函数虽然返回值为Void(代表没有返回值) , 其实有返回值 因为我们加了一个新的关键字, out , 这个关键字能够将 s 单独返回. 同样out关键字也是以传址的方式进行运算的. 还有,out 参数可以不用赋值,即使你赋值了也会被忽略
{
s = ;
if (i > t)
i += ;
else
t += ;
} static void Main(string[] args)
{
// 现在我们来使用上面定义的四个函数,看看效果是怎样的.
int a = , b = , c;
//1. 传值方式的函数
Myfuntion(a, b); // 这个时候a and b 还是等于 10 和 15 , 因为函数中的形参虽然改变结果了. 但是不会影响到实参.
Console.WriteLine("a : {0} and b : {1}",a,b + "\n"); // 2. 传址方式的函数
Myfuntion1(ref a, ref b); //这里要注意, 函数中使用了ref关键字,在调用的时候也要使用ref关键字. 此时的结果应该是a = 10 b = 20 因为上面的代码是传址方式的, 形参发生了改变也会影响到实参
Console.WriteLine("a : {0} and b : {1}",a,b + "\n"); // 3.隐式的传址方式函数.
int[] My = new int[]; //定义一个数组并且为它赋值
for (int i = ; i < My.Length; i++)
{
My[i] = ;
}
// 现在调用函数
Myfuntion2(My); //结果可想而知, my的每一位都会等于 50
foreach (int w in My)
{
Console.WriteLine(w);
Console.WriteLine();
} // 4. out 参数函数
Myfuntion3(a, b, out c); //同样, 和ref一样在调用的时候也需要加上关键字
Console.WriteLine(c); // c应该会等于 50
//我们试试把C赋值了之后再调用函数,看看会发生什么.
c = ;
Myfuntion3(a, b, out c);
Console.WriteLine(c); //还是会等于50;
}
}
}
// 下面是运算结果 /* a : 10 and b : 15
-------------------
a : 10 and b : 20
------------------
40 40 40 40 40
----------------------
50
----------------------
50 * */

C# 函数的传值与传址(转)的更多相关文章

  1. C#-函数的传值与传址

    传值就是将实参的值传到所调用的函数里面,实参的值并没有发生变化,默认传值的有int型,浮点型,bool型,char字符型,结构体等等. 传址就是将地址传到所调用的函数里面操作,实参的值也会跟着变化,传 ...

  2. Java传值和传址

    调用函数时,传的参数过去可能是传值,也可能是传址.如果是传值,函数内部的操作对参数的值没有影响:如果是传址,函数内部的操作是对参数指向的内存进行操作,会影响参数的值. Java到底是传值还是传址?用下 ...

  3. js 的复制和引用 (传值和传址)

    复制(传值-实参):  基本类型赋值.函数参数 引用(传址-形参):  对象.数组.函数

  4. javascript的变量,传值和传址,参数之间关系

    先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型) ...

  5. Python的传值和传址与copy和deepcopy

    1.传值和传址 传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针).他们的区别是如果函数里面对传入的参数重新赋值,函数外的全局变量是否相应改变,用传值传入的参数是不会 ...

  6. 图解JS的传值与传址

    //编程过程中经常会碰到传值,传址的问题!今天的主题就是关于传值.与传址. //先讲讲赋值操作 //下例是原始类型赋值操作 var a=1,b=a,a=2; console.log("a=& ...

  7. javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象

    对象字面量  JSON var obj = { aaa :999}; var json={"aaa":999,"bbb":888}; "kay&quo ...

  8. 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址

    在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...

  9. java方法中,传参是传值还是传址问题(对比C语言、C#和C++)

    问题引出: 编写一个简单的交换值的小程序,如果我们只是简单地定义一个交换函数接收两个数,在函数内部定义一个中间变量完成交换.那么当我们把a,b两个实参传给这个函数时,往往得不到预期的结果.这是为什么呢 ...

随机推荐

  1. 零基础入门学习Python(26)--字典:当索引不好用时2

    知识点 删除字典元素 能删单一的元素也能清空字典,清空只需一项操作. 显示删除一个字典用del命令,如下: >>> dict1 = {'a':1,'b':2,'c':3} >& ...

  2. Windows下Eclipse+PyDev安装Python开发环境

    .简介 Eclipse是一款基于Java的可扩展开发平台.其官方下载中包括J2EE方向版本.Java方向版本.C/C++方向版本.移动应用方向版本等诸多版本.除此之外,Eclipse还可以通过安装插件 ...

  3. 【转载】Hadoop NameNode 高可用 (High Availability) 实现解析

    转载:https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-name-node/ NameNode 高可用整体架构概述 在 Had ...

  4. allegro学习--区域约束

    前言: 在有些情况需要我们在走线时在某些区域的时候,线是细的,例如BGA封装的FPGA在引出线的时候,我们希望在FPGA内部的线细,出了FPGA后,线变粗.如图: 这就用到了区域的规则约束. 实现: ...

  5. 最详细的JavaWeb开发基础之java环境搭建(Mac版)

    阅读文本大概需要 5 分钟. 我之前分享过在 Windows 下面配置 Java 环境,这次给大家带来的是 Mac 下面安装配置 Java 环境.首先 Mac 系统已经带有默认的 Java,但是由于使 ...

  6. 九度oj 题目1490:字符串链接

    题目1490:字符串链接 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2610 解决:1321 题目描述: 不用strcat 函数,自己编写一个字符串链接函数MyStrcat(char ...

  7. POJ 2431 Expedition【贪心】

    题意: 卡车每走一个单元消耗一升汽油,中途有加油站,可以进行加油,问能否到达终点,求最少加油次数. 分析: 优先队列+贪心 代码: #include<iostream> #include& ...

  8. operamasks-omGrid的使用

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="personTab.aspx ...

  9. JSP处理XML数据

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/xml-data.html: 当通过HTTP发送XML数据时,使用JSP处理传入和传出的XML文件是有意义 ...

  10. LoadRunner脚本编写

    性能測试project师要懂代码么?答案是必须的.好多測试员觉得在loadrunner中编写脚本非常难非常牛X ,主要是大多測试人员并未做过开发工作,大学的那点程序基础也忘记的几乎相同了. 还有非计算 ...