C#数据类型及差异(复习专用)
一.数据类型
- 值类型
| 类型 | 描述 | 范围 | 默认值 |
|---|---|---|---|
| bool | 布尔值 | True 或 False | False |
| byte | 8 位无符号整数 | 0 到 255 | 0 |
| char | 16 位 Unicode 字符 | U +0000 到 U +ffff | '\0' |
| decimal | 128 位精确的十进制值,28-29 有效位数 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
| double | 64 位双精度浮点型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
| float | 32 位单精度浮点型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
| int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 |
| long | 64 位有符号整数类型 | -923,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
| sbyte | 8 位有符号整数类型 | -128 到 127 | 0 |
| short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 |
| uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 |
| ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 |
| ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 |
- 引用类型
- 数组
- 类(自定义类)
- 字符串
- 接口
- Object
- 委托
- 指针类型
官方给出的说明
在指针类型中的
*之前指定的类型被称为“referrent 类型”。 以下任一类型均可为 referrent 类型:- 任何整型类型:sbyte、byte、short、ushort、int、uint、long、ulong。
- 任何浮点类型:浮点、双精度。
- 字符。
- 布尔型。
- 小数。
- 任何枚举类型。
- 任何指针类型。 这允许如
void**的表达式。 - 任何仅包含非托管类型字段的用户定义的结构类型。
指针类型不从对象继承,并且指针类型与
object之间不存在转换。 此外,装箱和取消装箱不支持指针。但是,你可在不同的指针类型之间以及指针类型和整型之间进行转换。在同一个声明中声明多个指针时,星号 (*) 仅与基础类型一起写入;而不是用作每个指针名称的前缀。 例如:
C#复制int* p1, p2, p3; // Ok
int *p1, *p2, *p3; // Invalid in C#
指针不能指向引用或包含引用的结构,因为无法对对象引用进行垃圾回收,即使有指针指向它也是如此。垃圾回收器并不跟踪是否有任何类型的指针指向对象。
- 指针简单应用
//指针
unsafe
{
char* cptr = stackalloc char[];//分配内存
//stringAppend();
for (int i = ; i < ; i++)
{
cptr[i] = (char)(i + );
}
for (int i = ; i < ; i++)
{
Console.WriteLine(string.Format("{0}:{1}",(int)&cptr[i],cptr[i]));
}
}定义一个char类型指针并分配26字节内存,for循环给指针赋值,输出int类型指针地址及它转化位string的值:
- 结果为:

- 在内存中查看 :调试-》窗口-》内存-》内存1 ,我们把int类型指针值复制到地址栏,vs自动转化位十六进制, 右键-》带符号显示 ,得到结果为char对应的数字
- 引用类型
二. 基本类型主要差异
- 基本类型:值类型,引用类型
- 相同点:
- 引用类型可以实现接口,值类型当中的结构体也可以实现接口;
- 引用类型和值类型都继承自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. 引用类型占用内存不固定, 根据它所创建的对象对应的数据大小不同而不同。
C#数据类型及差异(复习专用)的更多相关文章
- C#知识点提炼期末复习专用
根据内部消息称:有三类题型: 程序阅读题:2题 简答题:2题 (主要是对概念的考查) 编程题:暂定2-3题 复习要点: .net framework 通用语言开发环境..NET基础类库..NET ...
- python3内存存储几种数据类型对差异
列表,元组,集合,字典几种数据类型差异 列表: list=[0,1,'a'] 元组:list=(0,1,'a') 集合 :list=[0,1,'a'] 字典:list={name:'tom',age: ...
- C#字符串要点(复习专用)
一.字符串 通过string定义一个字符串,或者通过String类来创建对象. 通过new String() 创建有一下几种构造函数(从元数据),以此顺序创建string: // // 摘要: // ...
- C++类构造析构调用顺序训练(复习专用)
//对象做函数参数 //1 研究拷贝构造 //2 研究构造函数,析构函数的调用顺序 //总结 构造和析构的调用顺序 #include "iostream" using namesp ...
- python随笔--复习专用
<!doctype html> blockquote:first-child, #write > div:first-child, #write > figure:first- ...
- Javascript高级编程学习笔记(3)—— JS中的数据类型(1)
前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...
- 从商用到开源:15个维度,全面剖析DB2与MySQL数据库的差异
随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多.进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据类型之间的转换. 相关阅读: 从商用到开 ...
- DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比
随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多.进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据类型之间的转换. 相关阅读: 从商用到开 ...
- MySQL 基础数据类型优化(如何选择数据类型)
前言: 最近在看高性能 MySQL,记录写学习笔记: 高性能 MySQL 学习笔记(二) Schema与数据类型优化 笔记核心内容:MySQL 如何选择正确的数 ...
随机推荐
- angular的$q,defer,promise
$q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(或异常). 官网:http://docs.angularjs.cn/api/ng/servi ...
- HIVE-默认分隔符的(linux系统的特殊字符)查看,输入和修改
这段时间做hive的时候,用到了系统默认分隔符.通常下面2中情况我们需要需要用到分隔符 1,制作table的输入文件,有时候我们需要输入一些特殊的分隔符 2,把hive表格导出到本地时,系统默认的分隔 ...
- 日志管理系统ELK6.2.3
https://www.jianshu.com/p/88f2cbedcc2a 写在前面 刚毕业工作的时候,处理日志喜欢自己写脚本抓取数据分析日志,然后在zabbix上展示出来.但是开发要看日志的时候, ...
- 蓝桥杯 历届试题 PREV-32 分糖果
历届试题 分糖果 时间限制:1.0s 内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边 ...
- GUI练习中
总结:JFrame和Frame是有很大差别的. 不要混淆.否则方法是不能成功调用的 特别是背景色:JFrame.对象f在main里无法调用背景色前景色都不想显示 一下是书上的一段代码,编译错误,但是可 ...
- Lib之过?Java反序列化漏洞通用利用分析
转http://blog.chaitin.com/ 1 背景 2 Java反序列化漏洞简介 3 利用Apache Commons Collections实现远程代码执行 4 漏洞利用实例 4.1 利用 ...
- Oracle 存储过程学习笔记
1.存储过程简单实例 CREATE OR REPLACE PROCEDURE 存储过程名称 (参数in,参数out) AS -- 变量声明,每个声明用分号结束.可以在声明的同时初始化 name ); ...
- 正则表达式 notes
nfs 网络文件系统 存储类型:块存储,对象存储,文件存储 nfs属于文件存储 crond 分钟小时日月周 命令:绝对路径 命令是由crond解释 /bin/bash a.sh */2 * * * * ...
- Oracle中REGEXP_SUBSTR函数(字符串转多行)
Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20',' ...
- MySQL 删除字段数据某关键字后的所有数据
),'开发商') WHERE Compay LIKE '%开发商%'; sql附上