初学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); //在控制台打印出变量的值
作者:OneCopper
出处:http://www.cnblogs.com/onecopper
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
------快速回复绿色通道------