值类型与引用类型

值类型与引用类型

  • 值类型变量存储的是数据本身,引用类型变量存储的是数据的地址。
  • 值类型数据事先就能预知需要分配的内存空间,而引用类型数据事先通常不能预知需要分配的内存空间。
  • 值类型有:int, double, bool, char, struct类型等。
  • 引用类型有:string, 数组, class类型
  • 只有引用类型变量可以赋值为null,表示没有数据。

内存分配

  • 声明变量时计算机就会分配内存,变量名就代表了这块内存的地址。
  • 引用类型数据可以用new关键字申请内存。
    "likang"; // 分配了6 *2个字节的内存(其实还有一个结束符),一个char占2个字节。
    new int[10]; // 分配了4*10个字节的内存。  
    new Hero(); // 分配的内存要看Hero类中数据。
    
  • 分配内存时要明确分配的大小。
  • 引用类型变量用4个字节(32位机的地址长度就是32位)存储一个内存地址。
    double a; // 分配8个字节,因为每个double固定占8个字节。
    int[] b; // 数组是引用类型,分配4个字节存储地址。
    
  • 给引用类型变量赋值是把数据的首地址赋值给变量。
    int[] a = new int[10]; 
    // 执行过程:
    // 1.申明a变量,分配4个字节的内存。
    // 2.new int[10],分配连续的40个字节内存。
    // 3.把这40个字节内存的首地址赋值给a。
    

访问变量的过程

  • 值类型是直接访问数据的。
  • 引用类型要通过引用的地址访问数据。

ref

  • 交换两个变量中的数据。

解释

  • struct中不能定义本类型的变量,但class中可以定义本类型的变量。

案例分析

  • 传值与传引用
  • 修改引用参数中的数据
  • 修改引用参数

结构与类的区别

最早的类就是从结构演变过来的,C++structclass是完全一样的。但在C#中他们有了不同的分工。

  • struct表示一个包含多个数据的复合数据类型,class用来封装一类事物的属性、方法、事件等。
  • struct是值类型,class是引用类型。
  • struct中的变量不能赋初值,class的可以。
  • struct中不能有本类型的成员变量,class中可以有。
  • struct的构造函数要给所有成员变量赋值,class不必。
  • 但定义了一个有参构造函数后struct中还会有默认无参构造函数,class中就不会了。
  • struct中必需有一个可访问的无参构造函数,class中可以没有。

results matching ""

    No results matching ""