C#数据类型及差异(复习专用)

一.数据类型

    1. 值类型
类型描述范围默认值
bool布尔值True 或 FalseFalse
byte8 位无符号整数0 到 2550
char16 位 Unicode 字符U +0000 到 U +ffff'\0'
decimal128 位精确的十进制值,28-29 有效位数(-7.9 x 1028 到 7.9 x 1028) / 100 到 280.0M
double64 位双精度浮点型(+/-)5.0 x 10-324 到 (+/-)1.7 x 103080.0D
float32 位单精度浮点型-3.4 x 1038 到 + 3.4 x 10380.0F
int32 位有符号整数类型-2,147,483,648 到 2,147,483,6470
long64 位有符号整数类型-923,372,036,854,775,808 到 9,223,372,036,854,775,8070L
sbyte8 位有符号整数类型-128 到 1270
short16 位有符号整数类型-32,768 到 32,7670
uint32 位无符号整数类型0 到 4,294,967,2950
ulong64 位无符号整数类型0 到 18,446,744,073,709,551,6150
ushort16 位无符号整数类型0 到 65,5350
    1. 引用类型
      1. 数组
      2. 类(自定义类)
      3. 字符串
      4. 接口
      5. Object
      6. 委托
    2. 指针类型
      1. 官方给出的说明

        1.   在指针类型中的 * 之前指定的类型被称为“referrent 类型”。 以下任一类型均可为 referrent 类型:

          指针类型不从对象继承,并且指针类型与 object 之间不存在转换。 此外,装箱和取消装箱不支持指针。但是,你可在不同的指针类型之间以及指针类型和整型之间进行转换。

          在同一个声明中声明多个指针时,星号 (*) 仅与基础类型一起写入;而不是用作每个指针名称的前缀。 例如:

          C#复制
          int* p1, p2, p3;   // Ok
          int *p1, *p2, *p3;   // Invalid in C#
          

          指针不能指向引用或包含引用的结构,因为无法对对象引用进行垃圾回收,即使有指针指向它也是如此。垃圾回收器并不跟踪是否有任何类型的指针指向对象。

        2. 指针简单应用
          1.   
            //指针 unsafe { char* cptr = stackalloc char[26];//分配内存 //stringAppend(); for (int i = 0; i < 26; i++) { cptr[i] = (char)(i + 65); } for (int i = 0; i < 26; i++) { Console.WriteLine(string.Format("{0}:{1}",(int)&cptr[i],cptr[i])); } }

            定义一个char类型指针并分配26字节内存,for循环给指针赋值,输出int类型指针地址及它转化位string的值:

          2. 结果为:
          3.  

          4. 在内存中查看 :调试-》窗口-》内存-》内存1 ,我们把int类型指针值复制到地址栏,vs自动转化位十六进制, 右键-》带符号显示 ,得到结果为char对应的数字

             

二. 基本类型主要差异

    1. 基本类型:值类型,引用类型
      1. 相同点:  
        1. 引用类型可以实现接口,值类型当中的结构体也可以实现接口;
        2. 引用类型和值类型都继承自System.Object类。

          2.不同点

             1.值类型直接储存在内存栈中,引用类型在栈中储存它在堆中内存单位的地址。

             2.值类型存取速度快,引用类型存取速度慢。

             3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。

             4.值类型继承自System.ValueType,引用类型继承自System.Object。

             5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放。

二. 类型之占用内存

    1.值类型占用内存

            Console.WriteLine("bool size:{0}", sizeof(bool));
            Console.WriteLine("byte size:{0}", sizeof(byte));
            Console.WriteLine("char size:{0}", sizeof(char));
            Console.WriteLine("decimal size:{0}", sizeof(decimal));
            Console.WriteLine("double size:{0}", sizeof(double));
            Console.WriteLine("float size:{0}", sizeof(float));
            Console.WriteLine("int size:{0}", sizeof(int));
            Console.WriteLine("long size:{0}", sizeof(long));
            Console.WriteLine("sbyte size:{0}", sizeof(sbyte));
            Console.WriteLine("short size:{0}", sizeof(short));
            Console.WriteLine("uint size:{0}", sizeof(uint));
            Console.WriteLine("ulong size:{0}", sizeof(ulong));
            Console.WriteLine("ushort size:{0}", sizeof(ushort));
            Console.WriteLine("--------------------------------------");   

      

        · 1字节=8位 与值类型描述一致;

    2. 引用类型占用内存不固定, 根据它所创建的对象对应的数据大小不同而不同。

 

转载于:https://www.cnblogs.com/hkf100/p/9558955.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值