小弟对C#一点不懂,一直在用VC6.0写程序。最近想实现个功能,上网载了个C#的,不想太动脑子了,就想把它稍微改一下完成某个功能。
但在C#里面编写程序时遇到了点困难,
在C++中可以使用如下代码:
byte *pByte = NULL;
byte array[100];pByte = array + 10;//这样去直接取第10个值,但这样在C#里面不让编译通过,我就想使用这种方法,不知道哪位高手原意指点一下。谢谢了。
但在C#里面编写程序时遇到了点困难,
在C++中可以使用如下代码:
byte *pByte = NULL;
byte array[100];pByte = array + 10;//这样去直接取第10个值,但这样在C#里面不让编译通过,我就想使用这种方法,不知道哪位高手原意指点一下。谢谢了。
还有点小问题。我看了一下2楼朋友们的见面,里面说写函数时加上unsafe,
unsafe static void SquarePtrParam(int* p)
{
*p *= *p;
}3楼朋友说加 /unsafe编码器选项,这个我不明白在哪里加。
6.0用惯了,2008真不知道在哪,谢谢了
{
byte[] array = new byte[100];
for (byte b = 0; b < 100; b++)
array[b] = b;
fixed (byte* p = &array[0])
{
byte* pByte = p;
pByte += 10;
Console.WriteLine(*pByte);
}
}
劝你不要在C#里面玩指针
/unsafe(启用不安全模式)(C# 编译器选项)/unsafe 编译器选项允许对使用 unsafe 关键字的代码进行编译。在 Visual Studio 开发环境中设置此编译器选项1. 打开项目的“属性”页。2. 单击“生成”属性页。3. 选中“允许不安全代码”复选框。
那么就在控制台输入
csc \unsafe test.cs在VS里面可能就直接编译,没试过不安全代码。
再加个小小问题,
我的类的构造函数是这样定义的。
public downloadInfo(char[] infos)下面构造对象的时候是这样的:
char* pChar = p + i * bufferSize;
downloadInfo dlInfo = new downloadInfo(pChar);编译器的意思就是说这里不能把char *类型的变量赋给char []类型的变量。
请问这里怎么办?
char* pChar = p + i * bufferSize;
char[] arrayChar = new char[len];
for (int k = 0; k < len; k++)
{
arrayChar[k] = pChar[k];
}
downloadInfo dlInfo = new downloadInfo(arrayChar);
char* pDouble=stackalloc char[50] //在非托管栈声明 char[]
而
char[] arrayChar = new char[50]; 是在托管堆上声明char[]ls的代码 for (int k = 0; k < len; k++)
{
arrayChar[k] = pChar[k];
}
实际是把托管堆上的对象封送到非托管栈不过就一般意义上而已,如果是unsafe编程,那么实际可以直接用
char* pDouble=stackalloc char[50] 申明成非托管的char[]