求助 函数参数传递的问题

erick08 2012-02-27 04:50:23
因我之前一直用C++的,目前一个项目必须用C#,
现在2个问题,熟悉C#的大大指导一下

问题1:
在C++中:

void f2(int a[])
{

}

void f1()
{
int a[10];
f2(a + 5); //C++中可直接传a[5]的地址给f2函数
}


然而C#中:

static void f2(int a[])
{

}

static void f1()
{
int a[10];
f2(a + 5); //C#中不可直接传a[5]的地址给f2函数
}


在C#中,每个类型都是对象,按C++的思路传不了。
请问怎么实现这个操作呢?


问题2:
在C++中:

void f2(UINT32 *a)
{

}

void f1()
{
UINT8 a[10];
f2((UINT32 *)a); //C++中可直接强制把UINT8*转换为UINT32*并传给f2函数
}

然而C#中:

static void f2(uint a[])
{

}

static void f1()
{
byte a[10];
f2(???); //C#中试过,但都不成功,怎么传呢?
}

在C#中,请问又该怎么实现这个操作呢?
郁闷了一天,希望有人指点迷津~
...全文
118 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
erick08 2012-03-01
  • 打赏
  • 举报
回复
2楼的差不多能解决问题,结贴
erick08 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhangbin1988 的回复:]
C# code


static void f2(ref int a)
{

}

static void f1()
{
int a[10];
f2(ref a[5]);
}


這樣可以達到樓主的要求嘛?!!!
[/Quote]

不好意思,上面弄错了
上面的代码,传过去就是单个数值a,不是数组了。
erick08 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 erick08 的回复:]
谢谢上面两位详细的回答,不过我还没能解决问题,
其实第二个问题我是想知道怎么通过数组的形式而不是指针的方法,
继续求助
[/Quote]

这样传过去就是a,不是数组了。
ayzen1988 2012-02-28
  • 打赏
  • 举报
回复

static void f2(ref int a)
{

}

static void f1()
{
int a[10];
f2(ref a[5]);
}

這樣可以達到樓主的要求嘛?!!!
erick08 2012-02-28
  • 打赏
  • 举报
回复
谢谢上面两位详细的回答,不过我还没能解决问题,
其实第二个问题我是想知道怎么通过数组的形式而不是指针的方法,
继续求助
zzzzv0 2012-02-27
  • 打赏
  • 举报
回复
第一个,如果只是希望修改a[5]的值,那么用ref a[5]
如果还希望通过a[5]找到a[6] a[7],那还是把a传过去吧

第二个,10除以4余2啊,貌似只能用BitConverter一个一个转UInt32

c#本身也有指针,不过我没用过,你自己试试
unsafe class Program
{
static void f2(int* a)
{
}

static void f3(UInt32* a)
{
}

static void f1()
{
fixed (int* a = new int[10])
{
f2(a + 5);
f3((UInt32*)a);
}
}
}
qldsrx 2012-02-27
  • 打赏
  • 举报
回复
问题一:你需要创建一个新的数组,用老数组的内容复制到新数组,从偏移地址5开始复制,然后拿新数组传递给你的函数f2。如果要提高效率,你也可以改造你的f2函数,让它增加一个参数(偏移地址)。

问题二:指针是为了某些需要高效率操作的场合而保留的,且必须用fixed关键字将内存地址固定,函数必须声明为unsafe,且启用不安全代码。由于C#的指针无法和实际的类进行交互操作,所以特殊类型是不推荐用指针来操作的,一般指针是对byte[]这样的内存原始数据操作才会去使用。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧