unsafe 标记还要修改项目属性

解决方案 »

  1.   

    你是不是想用指针?int s = 5;
    int * sp = &s;
      

  2.   

    在C#中不可以定义类似:long& rok这样的引用变量。你只能装值类型数据装箱后再引用。
      

  3.   

    装箱没有用???
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                string str="ooooooooooo";
                A a = new A(ref str); //按引用传递str
                a.change();  //修改STR的值
                MessageBox.Show(str); //输出依然是ooooooooooo
            }
        }    public class A
        {
            object obj;
            public A(ref string sss)
            {
                obj = sss; //装箱
            }        public void change()
            {
                obj = "aaaaaaaaaaa"; 
            }
        }
      

  4.   

    private void button1_Click(object sender, EventArgs e)
            {
                unsafe
                {
                    string str = "abcde";
                    fixed (char* pStr = str)
                    {
                        A a = new A(pStr);
                        a.change();
                        MessageBox.Show(str.ToString());
                    }
                }
            }
        }    public class A
        {
            unsafe char* pStr = (char*)0;
            public unsafe A(char* sss)
            {
                pStr =sss;
            }        public unsafe void change()
            {
                *pStr = "fghijkl";//郁闷了,高手来帮帮我。谢谢。        }
        }
      

  5.   

    C#中基本数据类型都是值类型 分配在堆栈中
    复杂的数据类型,还有自己写的类都是引用类型 分配在托管堆上
    如果你真要那么做,就把long ok=3333; 写到你自己的类属性里
    下面对于你自己的类的引用都是引用类型
      

  6.   

    static void Main(string[] args)
    {
        unsafe
        {
            int num = 100;
            int* p = #        Console.WriteLine(*p);
        }
    }再设置项目属性-〉生成 允许不安全代码
      

  7.   

    amandag(高歌) 
    /////////我就是需要一个引用变量啊,帮帮我啊。
      

  8.   

    object rok = ok;
    ~~ 路过的  最讨厌指针拉
      

  9.   

    private void button1_Click(object sender, EventArgs e)
            {
                unsafe
                {
                    string str = "abcde";
                    fixed (char* pStr = str)
                    {
                        A a = new A(pStr);
                        a.change();
                        MessageBox.Show(str.ToString());
                    }
                }
            }
        }    public class A
        {
            unsafe char* pStr = (char*)0;
            public unsafe A(char* sss)
            {
                pStr =sss;
            }        public unsafe void change()
            {
                *pStr = (char *)"fghijkl";//郁闷了,高手来帮帮我。谢谢。        }
        }
      

  10.   

    装箱
    long b = 15;
    objec a = b;
      

  11.   

    对正常的托管代码在C#里绝对不允许出现指针这样的操作符号,除非你把某断代码声明为UNSAFE即非托管的
      

  12.   

    你要是轻量级的对参数操作用ref 或 out不就得了
      

  13.   

    C# 有两种引用类型
    类和指针
    不会 指针 不愿你
    那类呢
    LZ 你乍了
    不会封装吗
      

  14.   

    楼上,我就是不用类封装,就是要用指针。这么简单一个引用变量的问题都封装到一个类去,那不是吃多了吗?????毛病!没有什么是一定要用的,除非你是想测试,学习一下。"你要是轻量级的对参数操作用ref 或 out不就得了"说得对。
      

  15.   

    是不是想用ref 不太清楚你的上下文
      

  16.   

    ref 或out啊..
    ref int a=0;
    out float b;你就可以把a,b当引用用了撒..(做为方法参数)
      

  17.   

    楼主,还是用C++吧,你不适应用C#。你想达到什么目的?传递给函数还是...? 如果仅仅为了传递给函数,用ref 或 out就好了。如果是为了模拟C++的指针,还是免了吧。
      

  18.   

    请参考<<Extending MFC Applications with the .NET Framework>> 一书。
      

  19.   

    装箱没有用???
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                string str="ooooooooooo";
                A a = new A(ref str); //按引用传递str
                a.change();  //修改STR的值
                MessageBox.Show(str); //输出依然是ooooooooooo
            }
        }    public class A
        {
            object obj;
            public A(ref string sss)
            {
                obj = sss; //装箱
            }        public void change()
            {
                obj = "aaaaaaaaaaa"; 
            }
        }
    这个程序的问题是C#给String类重载了等号,obj = sss这一句是拷贝构造而不是装箱。即使等号没有重载,这句也应该是赋引用而不是装箱,因为String已经是引用类型了。
      

  20.   

    private void button1_Click(object sender, EventArgs e)
            {
                unsafe
                {
                    string str = "abcde";
                    fixed (char* pStr = str)
                    {
                        A a = new A(pStr);
                        a.change();
                        MessageBox.Show(str.ToString());
                    }
                }
            }
        }    public class A
        {
            unsafe char* pStr = (char*)0;
            public unsafe A(char* sss)
            {
                pStr =sss;
            }        public unsafe void change()
            {
                *pStr = (char *)"fghijkl";//郁闷了,高手来帮帮我。谢谢。        }
        }这个程序的问题是.Net里,String不是char[],所以"fghijkl"不能转换成char*,这里应该换成一个字符常量而不是字符串常量。把这一句改成
    *pStr = '1';
    执行后,abcde应该会变成1bcde。
      

  21.   

    long ok = 3333;
    unsafe
    {
        long* rok = &ok;
        *rok = 5;
    }
    MessageBox.Show(ok.ToString());