测绘程序设计|C#基本数据类型|值类型与引用类型

由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~


  简单介绍了测绘程序设计大赛会遇到的C#基本数据类型(int、float、double、string、char、数组),C#值类型与引用类型,看完感觉C#也就那样~

🌿前言

  数据类型是编程入门的基础,也是小白入门的一道门槛。本文结合测绘程序设计大赛,用简单的语句介绍了C#的基本数据类型以及易错点,同时抛出C#值类型与引用类型的概念,仅供读者学习参考~

🍀C#基本数据类型

  C#常用的内置数据类型包括数值型(整型和浮点型)、字符串型(字符型和字符串型)以及数组,大部分编程语言都直接或间接的包括这些数据类型。

  C#还有很多其他的数据类型:byte、short与ushort、int与uint、long与ulong、decimal、bool、struct、enum、interface、collection等等,但对于测绘程序设计大赛而言,用的相对较少,读者可以自行学习了解。

1.整型(int)

// 测绘经常会用到的一个数
int myInt = 206265;//1米==1/pi*180*3600弧秒

  整型,就是整数嘛,英文全称integer,程序员都比较懒:在C#、C/C++以及大部分编程语言中,整型的关键字都是取integer前三个字母即int。

  需要特别注意的是:在C#、C/C++编程语言中,整数与整数之间的运算(加减乘除)结果仍为整数!如何理解呢?比如5/2,结果就会被抹掉小数位变成2。避免的方法也很简单:不让整数与整数之间运算即可:可以写成5*1.0/25/2.0。(1和1.0的区别就是1是整数而1.0是小数)。在2024年的测绘程序设计大赛中,也考到了这一条,也就那么亿点点考生入坑吧🤡。

  在Python3、Matlab编程语言中,并没有上述问题,这对Python和Matlab为编程母语的参赛选手敲一个警钟。(笔者就是Python出生的,好在笔者时刻注意着🤣)

2.浮点型(float、double)

float myFloat = 4687.0;//4687&&4787 红黑尺差
double myDouble = 3.0155;//基辅分划尺差

  浮点型,即小数类型,在C#和C/C++编程语言中,浮点数又分为:单精度浮点型(关键字为float)和双精度浮点型(关键字为double)。

  关于浮点型,笔者只想阐明的是float与double的直观区别:占用的内存不同、精度不同,float占用空间小精度也会比较低、double精度相对较高占用空间也会大。从关键字上也很容易看出:double、双精度,两个精度和一个精度你说谁精度比较高😂

  在现代计算机硬件条件足够的情况下,基本都使用double,测绘程序设计大赛也是用的double。当然,作为Python党的笔者也想插一句:在Python中,没有单精度和双精度区分,只有float(Python里是双精度)。

  另需要注意的是:浮点数1.4内部存储的可能是1.399999即浮点数表示不精确的问题,浮点数不能直接用==来判断是否相等,通常是作差然后小于某个微小值,就认为相等

4.字符型(char)

char myChar = '6';

  字符型,即单个的字符(字母、汉字、数字、符号…),英文全称character。用的相对较少。字符用英文单引号’包裹

  需要读者知道一些常用的转义字符(以反斜杠\开头):例如**\n表示回车换行**,\\表示单个反斜杠,\“\'可以表示双引号和单引号。剩余例如\t表示制表符,\b\r几乎用不到。

3.字符串型(string)

string myString = "听说有人不想学测绘?\n"

  字符串型,即给字符像炸串一样串在一起(在C语言中,就有用字符数组来表示字符串的例子):多个字符组合在一起组成字符串。字符串用双引号"包裹

  Python党又要插一句啦:在Python编程语言中,是没有字符串和字符区分的,统一为str,单引号双引号都可以用来包裹字符、字符串。

  字符串是贯穿于测绘程序设计大赛的一种数据类型,测绘程序设计的主要考点就是读取文本数据(字符串)按照要求计算得到计算报告再写入到文本文件。笔者后期将专门介绍C#字符串的一些操作与技巧~

5.数组(Array&&List)

//固定数组Array
int[] myInts = new int[3];//定义一个大小为3的固定数组

//动态泛型数组List
List<string> =  new List<string>() {};

  数组是多个数组成的一个组?错×,大No特No。笔者认为,数组是同一种数据类型变量组成的一个圈子,一个数组可以存放一种数据类型:比如int、double、string…以及自己定义的类等等。大家都是string类型,画一个圈给大家聚在一起,就聚成了字符串类型的数组。

  数组是程序设计重要组成部分,笔者后期也会专门介绍数组的操作与技巧~

🌸值类型与引用类型

  C#是一门类C语言,为例兼顾程序执行效率,将数据类型设计为值类型和印象类型,这是C#的难点之一,它与C语言中的指针(地址)类型很相似

  值类型(value type)直接在栈(stack)中分配,自动生成、自动释放,不需new就可直接使用。常见的简单数据类型都是值类型:int、float、double、char…struct(结构体)、enum(枚举)等等。

  引用类型(reference type)在堆(heap)中保存对象的值,在栈(stack)中保存对象的地址(引用),不能直接使用,在使用前需通过new向系统在堆(heap)中分配空间或指向已经new过的对象,默认值为null。例如:string、int、List<>(动态泛型数组)、class(类)、interface(接口)等等。

🍕笔者想说

  1. string(字符串)类型是引用类型而不是值类型
  2. 值类型就如同C语言的指针类型,它的一个特点就是“指向”,通常都会听说的是:定义一个变量,指向某个数组。这个特点会在编写函数是得到体现:将引用类型的参数传递到函数经过一番操作修改后,值可能会发生变化,如果参赛选手没有注意到这一点,或许会导致计算错误

🛴读者操作

  读者如果有机会,可以复制下面代码感受一下笔者的意思。该代码在Main函数中定义了大小为1的string类型的数组myArray并赋予第0号元素相应的值,随后调用了myFunction函数尝试修改isChange数组,再次打印myArray的值会出现什么呢?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp3
{
    class Program
    {
        static void myFunction(string[] isChange)
        {
            isChange[0] = "不,你变了";
        }

        static void Main(string[] args)
        {
            string[] myArray = new string[1];
            myArray[0] = "我没变";
            //打印调用前的myString
            Console.WriteLine($"{myArray[0]}");
            //调用函数
            myFunction(myArray);
            //打印调用后的myString
            Console.WriteLine($"{myArray[0]}");
            Console.ReadKey();//让VS不一闪而过
        }
    }
}

代码运行结果

不过在C#中,字符串虽然是属于引用类型,但它又属于不可变类型(immutable),读者也可以尝试修改上述的代码看看定义的字符串是否会发生变化~

字符串代码

🌹结语

  1. 笔者能力有限,仅能凭自己经验及所学尽可能的将知识简单化,以便小白入门,不足之处,望批评指正~

  2. 关于值类型与引用类型,读者可以阅读CSDN文章:https://blog.csdn.net/qiaoquan3/article/details/51202926 深入了解。

  3. 微软官方文档也有详细的介绍:https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/built-in-types

  4. 笔者为测绘遥感方向的学习者,愿意结交志同道合的伙伴,欢迎关注公众号与笔者一起交流学习~


  • 路虽远,行则将至;事虽难,做则必成。希望认真学习的你能够有所收获~

  • 本公众号的原创成果,在未经允许的情况下,请勿用于任何商业用途!

  • 如果本文有幸可以帮到您,欢迎您的点赞👍、收藏⭐与关注❤;您的点赞👍、收藏⭐与关注❤是我创作的最大动力~


微信公众号

CSDN博客二维码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小 y 同 学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值