c#中数组名作为参数如何通过修改形参的值来改变实参的值?

using System;
namespace ConsoleApplication1
{
    class Program
    {
        void f(int[] a)
        {
            a[0] = 1;//通过这种方式就可以修改实参的值,说明通过这种方式就是在原内存上来修改元素的值
        }
         static void Main(string[] args)
         {Program obj=new Program();
         int[] a =new int[4] { 6, 7, 8, 9 };
         obj.f(a);
         for (int i = 0;i<a.Length; i++)
         { Console.Write(a[i]+" "); }
         Console.ReadLine();
        }
     }
}
void f(int[] a)
        {
           a = new int[5] { 1, 2, 3, 4, 5 }; 
        }

obj.f(a);//这种情况不能通过修该形参的值,来达到修改实参的值;因为数组本身是一个引用类型,引用存放在栈中,引用的值也就是在堆中分配的内存;就拿此程序分析,一开始形参和实参都指向同一个内存块;但是当a = new int[5] { 1, 2, 3, 4, 5 }; 这条语句执行完后,相当于给形参在堆中分配了一个内存;此时就完全不相干了!若果真想通过这种方式来改变实参的值,可以采用这样的格式!如下所示:

void f(ref int[] a)
 {a = new int[5] { 1, 2, 3, 4, 5 };

}
 obj.f(ref a);

时间: 2024-10-12 16:37:54

c#中数组名作为参数如何通过修改形参的值来改变实参的值?的相关文章

C语言中数组名作为参数进行函数传递

用数组名作函数参数与用数组元素作实参有几点不同. 1) 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的.因此,并不要求函数的形参也是下标变量.换句话说,对数组元素的处理是按普通变量对待的.用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明.当形参和实参二者不一致时,即会发生错误. 2) 在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元.在函

把数组中的n个元素的值分别扩大5倍,要求数组名作为参数。

通过把数组名作为参数传递,实际上是把数组的地址传递给形式参数.这样在被调用函数中就可以对整个数组进行操作了,将数组名作为参数传递,调用函数和被调用函数都是对占同一块内存单元的数组进行操作. #include<stdio.h> #define N 10 void MulArray1(int *x,int n);//数组名作为参数的函数原型 void MulArray2(int *aPtr,int n);//指针作为参数的函数原型 void main() { int a[N]={1,2,3,4,5

[C++程序设计]用数组名作函数参数

1. 用数组元素作函数实参 1 #include <iostream> 2 using namespace std; 3 4 int max_value(int x, int max) 5 { 6 return max > x ? max : x; 7 } 8 9 int main() 10 { 11 const int x = 3, y = 4; 12 int a[x][y]={{34,62,34,101},{45,67,3,0},{11,45,97,100}}; 13 int max

C++ 数组长度 以及 数组名作为参数 传递给函数

在看排序,首先是插入排序,思路理清后想用代码实现,然后问题来了: 如何求数组长度? 如果没记错,在Java中应该是有直接可用的方法的, Python中(序列)也有.len,在C/C++中,字符串倒是有strlen() (需要#include <string.h>) 一个办法是用 sizeof() 一.首先定义数组 int array[] = {18,10,15,7,1}; 一开始想都没想就直接在子函数里面 int array_length(int a[]){ int len = sizeof(

MySQL中ib_logfile和ibdata1参数大小被修改后

1. 环境说明 RHEL 6.4 x86_64 + MySQL 5.5.37和MySQL 5.6.19 blog地址:http://blog.csdn.net/hw_libo/article/details/39215723 2. 案例:redo log文件(ib_logfile)大小参数被修改:innodb_log_file_size innodb_log_file_size = 256M  -- 修改为200M 版本是5.5的,启动失败,会出现如下错误: InnoDB: Error: log

数组作为函数参数

一.一维数组名作函数参数 用数组名作函数参数,应该在主调函数和被调函数分别定义数组,例如 <span style="font-size:18px;">void main() { void f(int b[10]);//void f(int b[]) int a[10]; f(a); }</span> 在被调用函数中声明了形参数组的大小为10,但在实际中,指定其大小是不起任何作用的,因为C语言编译对形参数组大小不做检查,只将实参数组的首元素地址传给形参数组.形参数

C++数组作为函数参数的几个问题(转)

本文需要解决C++中关于数组的2个问题:1. 数组作为函数参数,传值还是传址?2. 函数参数中的数组元素个数能否确定? 先看下面的代码. #include <iostream> using namespace std; void testArrayArg(int a[]) { cout << endl; cout << "in func..." << endl; cout << "array address: &qu

js中数组的方法

数组在笔试中经常会出现的面试题,javascript中的数组与其他语言中的数组有些不同,为了方便之后数组的方法学习,下面小编给大家整理了关于数组的操作方法,一起看看吧. 数组创建: 1.JavaScript中创建数组有两种方式,第一种是使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组 var arr2 = new Array(20); // 创建一个包含20项的数组 var arr3 = new Array("lily", "l

C++ 数组名作为函数参数 都是我的错

void func(char arr[100]) { cout<<sizeof(arr); } 这样一道题,我以为输出的是100呢……32位系统,结果是4 因为:数组名在函数体中被当成一个指针来使用 #include <iostream> using namespace std; void myF( char arr[100]) { cout<<sizeof(arr)<<endl; } int main(void) { char arr[100]; myF(