初学c#读书笔记(三)--类型、存储和变量B

7、栈和堆

  运行中的程序使用两个内存区域来存储数据:栈和堆。

  栈:
    栈是一个内存数组,是一个LIFO(last-in first-out 后进先出)的数据结构。
    栈存储几种类型的数据:
      某些类型的变量的值;
      程序当前的执行环境;
      传递给方法的参数。
    栈的特征:
      数据只能从栈的顶端插入或删除;
      把数据放到栈顶称为入栈(push);
      从栈顶删除数据称为出栈(pop);

  堆:
    堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据。与栈不同,堆里的内存可以任意顺序存入和移除。
    虽然程序可以在堆里保存数据,但并不能显式地删除它们。CLR的自动GC(Garbage Collector 垃圾收集器)在判断出程序代码将不会再访问某数据项时,自动清除无主的堆对象。

8、值类型和引用类型

  值类型只需要一段单独的内存,用于存储实际的数据。
  引用类型需要两段内存,第一段存储实际的数据,它总是位于堆中,第二段是一个引用,指向数据在堆中的存放位置。
  如果数据不是其他类型的成员,值类型,数据存放在栈里。对于引用类型,实际数据存放在堆里而引用存放在栈里。
  如果数据是另一个类型的成员:
    引用类型对象的数据部分始终存放在堆里;
    值类型对象,或引用类型数据的引用部分可以存放在堆里,也可以存放在栈里,这依赖于实际环境。
    请记住,对于一个引用类型,其实力的数据部分始终存放在堆里,无论是值类型还是引用类型。
    那结构(struct-值类型)数据部分中的值类型和引用类型在内存中是如何存放的呢?

              值类型            引用类型
预定义类型      sbyte  byte  float  double    object  string
           short  ushort  int  uint
           char  decimal  long  ulong
           bool

用户定义类型     struct  enum          class interface  delegate  array

9、变量

  变量时一种名称,表示程序执行时存储在内存中的数据。
  c#提供了4中变量:本地变量、字段、参数、数组元素

  变量在使用前必须声明:
    给变量命名,并为它关联一种类型;
    让编译器为它分配一块内存。

int var;

  变量初始化

int var = 10;

  自动初始化
    变量类型    存储位置    自动初始化    用途

    本地变量    栈或者栈和堆  否        用于函数成员内部的本地计算
    类字段     堆       是        类的成员
    结构字段    栈或堆     是        结构的成员
    参数      栈       否        用于把值传入或传出方法
    数组元素    堆       是        数组的成员

  多重变量声明
    多重变量声明中的变量必须类型相同;
    变量名必须用逗号分隔,可以在变量名后包含初始化语句。

int var1 = 10, var2, var3;
string str1, int var4; //错误,变量类型必须相同

   使用变量

1 int var = 10; //初始化变量
2 Console.WriteLine(var); //在控制台打印出变量的值
posted @ 2010-05-03 17:32  onecopper  阅读(407)  评论(0编辑  收藏  举报