数组作参数,怎样才能不准修改数组

问题描述

数组作参数的时候,默认是引用传递,也就是说函数可以修改数组里的值。我不希望函数修改数组里的值应该怎么写?voidfn(int[]consta)voidfn(constint[]a)我试这两种写法都不行,我想声明参数为不能修改,应该怎么写?

解决方案

解决方案二:
在函数里面自己复制下参数数组的值就行了
解决方案三:
这段代码你运行下,看看结果是什么:protectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};Response.Write(n[0]);}privatevoidA(int[]t){t[0]=10;}

解决方案四:
引用2楼dalmeeme的回复:

这段代码你运行下,看看结果是什么:C#codeprotectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};Response.Write(n[0]);}privatevoidA(int……

没看明白?
解决方案五:
你写的A()根本就没用到啊引用2楼dalmeeme的回复:

这段代码你运行下,看看结果是什么:C#codeprotectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};Response.Write(n[0]);}privatevoidA(int……

解决方案六:
看不懂啊引用3楼hdt的回复:

引用2楼dalmeeme的回复:这段代码你运行下,看看结果是什么:C#codeprotectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};Response.Write(n[0]);}privatevoidA(int……没看明白……

解决方案七:
封装一下数组structa{int[]b;publicintthis[int]{publicget{};privateset{};}}
解决方案八:
数组作参数的时候,默认是引用传递无论是什么类型,默认情况下都是按值传递的。据我所知,目前可以采取的办法是,传递这个数组前,先拷贝当个数组的一个副本。因为你本来就不希望函数的操作对你的先数组有任何影响。classProgram{staticvoidMain(string[]args){string[]val={"asp.net","c++"};foreach(stringiteminval)Console.WriteLine(item);string[]copy=newstring[val.Length];Array.Copy(val,copy,val.Length);tryChangeArray(copy);Console.WriteLine("===================");foreach(stringiteminval)Console.WriteLine(item);}staticvoidtryChangeArray(string[]val){if(val!=null&&val.Length>0)val[0]="changed";}}

解决方案九:
引用4楼ningweidong的回复:

你写的A()根本就没用到啊

解决方案十:
貌似没有直接的关键字哦,你这样变通一下行不。protectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};A(n.Clone()asint[]);Response.Write(n[0]);}privatevoidA(int[]t){t[0]=10;}

解决方案十一:
先前看错了,o(∩_∩)o...哈哈!!!闹了个笑话。

时间: 2024-10-30 02:25:05

数组作参数,怎样才能不准修改数组的相关文章

《C和C++代码精粹》——2.8 数组作为参数

2.8 数组作为参数 C和C++代码精粹当你把数组作为参数传递给一个函数,正如所预期的那样,是传递了指向数组第一个元素的指针.因此,可以在调用的函数中永久地改变数组元素的值.在程序清单2.12的函数f中,地址&a[0]按值传递给指针b,因此表达式b[i]就和表达式a[i]完全是一样的了.不可能按值传一个完整的内置数组. 即使用数组符号定义了参数b,即: int b[] 它同下面这种写法是完全一样的. int *b 程序清单2.12 说明作为参数的数组实际上是指针 // array5.cpp: 数

二维数组作形参该如何实现

问题描述 二维数组作形参该如何实现 假设有个函数A,在这个函数里定义了一个二维数组.再定义一个函数B,并在函数A里调用 函数B,通过B对这个二维数组进行处理(二维数组作形参),然后将结果返回到函数A.要求这个二维数组的长度 由函数A里的变量参数决定.请问诸位高手该如何实现? 解决方案 二维数组作为形参二维数组形参二维数组形参问题 解决方案二: 定义函数B时增加两个维数的参数.

c语言-C语言数组作为参数传入子函数

问题描述 C语言数组作为参数传入子函数 对不起,可能我没表达清楚,我想问,数组作为参数传入子函数为什么不是作为形式参数传入,请你看程序运行结果,如果数组作为形式参数传入子函数,那么形式参数的值并不会影响原来main函数中的值,但是实际上,main函数中数组原来的值已经被修改了,这是因为数组传入的是地址(指针),我的问题就在这里,传入的是指针为什么不是用完就扔的形式参数. 这与c语言的设计有关是吗?内部有什么机制吗? 解决方案 首先提一下std C 调用约定,参数的传递使用栈. 在传递时首先将参数

c语言中怎么把一个大小不确定的二维数组当作参数传入函数中

问题描述 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中,取大神,取大神,取大神 解决方案 用VC++新建一个程序,默认生成的main函数定义如下 int mian(int argc, char* args[]) 这就是一个例子. 解决方案二: 一个表示长度的参数,一个指向二维数组的指针 解决方案三: fun(args[][],int rows,int cols) 解决方案四: void Func(int array[][10]

MyBatis传入集合 list 数组 map参数的写法_java

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性

c++ 嵌入式-c++嵌入式,修改数组元素

问题描述 c++嵌入式,修改数组元素 如何添加数组元素,使得可以存储八个数据,数据来源是用条码枪扫描上去的.现在只能扫描一次就上传到服务器,需要修改为扫描多次,不超过8次,在都上传到服务器.如何修改呢?救急啊这是部分代码 解决方案 修改数组元素

c语言-C语言中二级指针修改数组问题。

问题描述 C语言中二级指针修改数组问题. 数组相当于一级指针,我写了一个二级指针被调用.结果它总是宕机,求指导,谢谢. 解决方案 这段程序编译会报错吧:cannot convert parameter 1 from 'char (*)[100]' to 'char **' 可以这样 试试看#include #include #include int getMemBuf(char*& p2){ char* tmp = NULL; tmp = (char*)malloc(100); strcpy(t

vb6 0-vb里面子过程参数为数组时,调用子过程出现数组未定义错误

问题描述 vb里面子过程参数为数组时,调用子过程出现数组未定义错误 大家好,我有段用松弛迭代法解线性方程组的程序,程序包括一个子过程ssor. 该子过程含有数组参数,在调用子过程时,提示数组参数未定义的错误. 下面是该程序,请热心人帮忙检查检查,谢谢大家! Sub ssor(a() As Single, n As Integer, b() As Single, x() As Single, eps As Single, om As Single, count As Integer) ' 松弛迭代

C++第2周项目3——用结构体数组作计算

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8635385 [项目3-用结构体数组作计算]接项目2,(1)从文件中读出数据,存放到你定义的结构体数组中,即项目2(1):(2)求出每名同学的总分(可以在读入过程中"顺便"计算):(3)按总分排序(降序):(4)输出排序后的成绩单:(5)有30名同学可