问一下,C#中的临时变量保存在什么地方? 是类似C++中的栈中吗?另外, 网上说, 数组是 Array的实例, 而且,声明数组的时候顺便用new来初始化,这个new 我感觉类似于C++中的new吧? 那么,是不是可以得出一个结论:C#中的数组是分配在堆中?(md,公司一下让我学这个,一下那个,受不了。)

解决方案 »

  1.   

    还有一个为问题, 字符串是unicode吧?那么它的结束符是'\0\0'?  吧?我是按照C++那套理解的,错了,请指教
      

  2.   

    void Main 这个函数,为什么要放在一个类中,虽然是静态方法,但是很诡异。
      

  3.   

    临时变量要看的,值类型直接放在栈里,引用类型内容放在堆里,对其的引用指针放在栈里。
    数组时引用类型,因此数组元素放堆里。字符串是unicode编码
      

  4.   

    关于string编码问题,可参考http://blog.csdn.net/www_123du_com/article/details/1114266
      

  5.   

    通常的,int/char/float/struct等值类型,是在Stack中。而引用类型则构造在Heap中,引用本身是在Stack中的。
      

  6.   

    所有struct都保存在stack中,包括int之类都是struct,其他引用类型则保存在heap,数组也是一种引用类型,缺省是在heap中,但你可以用stackalloc把数组分配在stack中,不过有点危险,int* vt = stackalloc int[100];仅用于指针,
      

  7.   

    本帖最后由 caozhy 于 2011-07-17 13:42:55 编辑
      

  8.   

    本帖最后由 caozhy 于 2011-07-17 13:40:54 编辑
      

  9.   

    换个角度,class这样的引用类型的实例对象,包括有一个Heap上的内存块和一个指向该内存块的指针对应。该内存块中分配有class中数值类型的空间。你回复中的x在堆上,就是说的属于class实例对象的内存块中的。public void somemethod()
    {
         int x = 0;      // 这个x变量是值类型的,分配在stack上
         Class1 c = new Class1();  // Class1的实例对象,其内存块分配在Heap上的,但c的引用是在Stack里的
         c.x = 5;      // 通过引用,找到在堆上内存块里的值类型成员x
    }class Class1
    {
        public int x = 0; 
    }
      

  10.   

    记得那个推荐帖的猪脚说C++转C#三天就足够了,LZ你应该多像他学习啊
      

  11.   

    多谢大牛了
    顺便也谢谢caozhy了。真是抱歉了 ,才20分,  我当时给分太少了, 回复我这么多,  
      

  12.   

    你好,我再问个问题啊,  在类中, 我举个例子class A
    {
          private  static  int size=50;  }用了static 修饰之后,那么这个变量应该不是放在堆栈中吧?而是静态区中吧,  如果把static 换成const之后呢?  是不是就放在了,常量区了?
    不知道我的理解对不对?望指教一下 
      

  13.   

    是否放在堆栈上跟static没有半毛钱关系,原因LS的都已经说的很清楚了
    static 换成const的区别是前者是运行时只读,后者是编译时已经就用你声明的常量替换到程序里面去了(就好像你从来没有声明过这个常量一样)
    并且在应用程序上下文中,只会在栈上分配一次(值/引用)