雁过请留痕...
代码改变世界

c# 不安全代码之指针

2012-09-28 16:43  xiashengwang  阅读(473)  评论(0编辑  收藏  举报

1,首先,编译器的选项里要打开“允许不安全代码”选项。

2,代码块要放在unsafe关键字中,或对整个函数使用unsafe关键字。

3,对于指向托管变量的指针分配必须放在fixed关键字中。

例子:

            int i;
            unsafe
            {
                byte a = 254, r = 240, g = 230, b = 220;
                byte[] bytes = new byte[] { a, r, g, b };

                //byte[] --> int
                //byte* pb = bytes;→报错,指向托管变量的指针要放在fixed中
                fixed (byte* pb = bytes)
                {
                    i = *((int*)pb);
                }
            }

4,非托管变量的指针分配可以不放在fixed关键字中。

            unsafe
            {
                int i2 = 1234567;
                int* ppp = &i2;//i2是分配在栈上的,所以可以这样写
            }

上面的i2不是分配在托管堆中的,所以不用fixed关键字也可以。