当前位置:
首页 > Python基础教程 >
-
C#教程之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[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的值:
- 结果为:
-
-
在内存中查看 :调试-》窗口-》内存-》内存1 ,我们把int类型指针值复制到地址栏,vs自动转化位十六进制, 右键-》带符号显示 ,得到结果为char对应的数字
-
-
-
-
引用类型
二. 基本类型主要差异
-
-
基本类型:值类型,引用类型
-
相同点:
- 引用类型可以实现接口,值类型当中的结构体也可以实现接口;
- 引用类型和值类型都继承自System.Object类。
-
相同点:
-
基本类型:值类型,引用类型
2.不同点
1.值类型直接储存在内存栈中,引用类型在栈中储存它在堆中内存单位的地址。
2.值类型存取速度快,引用类型存取速度慢。
3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。
4.值类型继承自System.ValueType,引用类型继承自System.Object。
5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放。
二. 类型之占用内存
1.值类型占用内存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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( "--------------------------------------" ); |
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式