| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 507 人关注过本帖
标题: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
快速回复:C#中函数参数问题
数据加载中...
 
   



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

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