标题:C#中函数参数问题
只看楼主
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
结帖率:100%
 问题点数:0 回复次数:4 
C#中函数参数问题

我编写的一个函数,包含有一个字节数组参数(没有引用ref)。调用后原数组的值随着函数内数组的改变而改变,这是什么原因呢?这跟C++是不是不相同呢?

搜索更多相关主题的帖子: 函数 参数 
2006-10-10 10:16
huangyajun
Rank: 1
等 级:新手上路
帖 子:78
专家分:0
注 册:2006-5-14
得分:0 

能不能说明白点,把你的函数发过来呀,

邮箱:hyj19851103@163.com


MyE-mail:hyj19851103@ 相互交流,相互学习
2006-10-10 10:20
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
得分:0 
public bool bCrcCheck_SearchTable(byte[] bDataWithCRC, int nCrcBitLength)
{
int nCrcByteLength = nCrcBitLength / 8;
int nDataLength = bDataWithCRC.Length - nCrcByteLength;
ushort uNewCrc;
//if the last crccode is 0 then right
for (int i = 0; i < nDataLength; i++)
{
uNewCrc = uCrcLookupTable[bDataWithCRC[i]];
for (int j = 0; j < nCrcByteLength; j++)
{
uNewCrc = (ushort)(uNewCrc ^ (bDataWithCRC[i + j + 1] << (8 * (nCrcByteLength - 1 - j))));
}
for (int k = 1; k <= nCrcByteLength; k++)
bDataWithCRC[i + k] = (byte)(uNewCrc >> (8 * (nCrcByteLength - k)));
}
bool bRtn = true;
for (int i = 0; i < nCrcBitLength / 8; i++)
if (bDataWithCRC[bDataWithCRC.Length - nCrcBitLength / 8 + i] != 0)
bRtn = false;
return bRtn;
}

我调用bCrcCheck_SearchTable(bData,8)之后,bData里的数据也改变了。

实践、学习、再实践、再学习......
2006-10-10 10:22
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
得分:0 

这不是值传递的概念吗?怎么也会改变原始值?


实践、学习、再实践、再学习......
2006-10-10 10:27
huangyajun
Rank: 1
等 级:新手上路
帖 子:78
专家分:0
注 册:2006-5-14
得分:0 
对于sting,int等简单类型是值传递,可是对于byte[]不是。对byte[]的修改会直接修改它的原始值。byte[]可能是种引用吧。具体原因还不知道。

MyE-mail:hyj19851103@ 相互交流,相互学习
2006-10-10 11:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-95201-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.256823 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved