值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。c++
值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,无论是否已经赋值,编译器为其分配内存。算法
引用类型(reference type):string 和 class统称为引用类型。当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并无为其分配堆上的内存空间。当使用 new 建立一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。数组
值类型的实例一般是在线程栈上分配的(静态分配),可是在某些情形下能够存储在堆中。引用类型的对象老是在进程堆中分配(动态分配)。数据结构
1)范围方面数据结构和算法
2)内存分配方面函数
3)适用场合spa
值类型在内存管理方面具备更好的效率,而且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。.net
1)C语言中的结构体不能为空线程
2) C语言中的结构体只涉及到数据结构 对象
1)概念
class和struct的语法基本相同,从声明到使用,都很类似,可是struct的约束要比class多,理论上,struct能作到的class都能作到,但class能作到的stuct却不必定作的到。
2)类型
struct是值类型,class是引用类型,所以它们具备全部值类型和引用类型之间的差别。
3)效率
因为堆栈的执行效率要比堆的执行效率高,可是堆栈资源却颇有限,不适合处理逻辑复杂的大对象,所以struct经常使用来处理做为基类型对待的小对象,而class来处理某个商业逻辑。
4)关系
struct不只能继承也能被继承 ,并且能够实现接口,不过Class能够彻底扩展。内部结构有区别,struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例字段。
参考文章:
http://blog.csdn.net/loving_forever_/article/details/51483828#comments
http://blog.csdn.net/qiaoquan3/article/details/51202926#comments