主要内容:1、二维数组,2、初始化二维数组,3、访问二维数组种的元素C# 中同样支持多维数组(也可称为矩形数组),它可以是二维的,也可以是三维的,多维数组中的数据以类似表格(行、列)的形式存储,因此也被称为矩阵。 要创建多维数组,我们需要在声明数组的方括号内添加逗号,例如: int[,] arr=new int[3,3]; // 声明一个二维数组 int[,,] arr=new int[3,3,3]; // 声明一个三维数组 1、二维数组
主要内容:Null 合并运算符(??)在 C# 1.x 的版本中,一个值类型的变量是不可以被赋值为 null(空值)的,否则会产生异常。而在 C# 2.0 中,新增了一个 nullable 类型,可以使用 nullable 类型定义包含 null 值的数据,例如,您可以在 nullable <Int32>(可为空的 int32 类型)类型的变量中存储 -2147483648 到 2147483647 之间的任何值或者 null。同样,
在 C# 中,do while 循环同样用于多次迭代一部分程序,但它与我们前面学习的 for 循环和 while 循环不同,for 循环和 while 循环会在循环开始之前先判断表达式的结果,只有表达式结果为真时才会开始循环,而 do while 循环会先执行一遍循环主体中的代码,然后再判断表达式的结果。也就是说,不论表达式的结果如何,do while 循环至少会执行一次。 do while 循环
主要内容:值类型,引用类型,指针类型C# 语言中内置了一些基本的数据类型,数据类型用来指定程序中变量可以存储的数据的类型,C# 中的数据类型可以大致分为三类: 值类型(Value types); 引用类型(References types); 指针类型(Pointer types)。 值类型 C# 中的值类型是从 System.ValueType 类中派生出来的,对于值类型的变量我们可以直接为其分配一个具体的值。当声明一个值类型的变
主要内容:using关键字,class关键字,C#中的注释,成员变量,成员函数,类的实例化,标识符C# 是一种面向对象的编程语言。在面向对象语言编程中,程序由各种对象组成,对象之间可以通过方法进行交互。相同种类的对象通常具有相同的类型,或者说相同种类的对象都在相同的 class 中。 例如,我们创建了一个 Rectangle 对象,用它来表示长方形,Rectangle 对象中具有 length(长)和 width(宽)两个属性。如果我们要计算长方形面积的话,则可以使用一个方法来接收 lengt
主要内容:C#程序结构,编译并执行程序在讲解 C# 的基本语法之前,让我们先来了解一下一个简单的 C# 程序是由哪些部分构成的。一个 C# 程序主要包括以下几个部分: 命名空间声明; 一个类(class); 类方法; 类属性; 一个 Main 方法; 语句和表达式; 注释。 C#程序结构 下面我们通过一个在命令行窗口打印“Hello World”的示例程序,来具体演示一下 C# 程序的组成,代码如下: 运行上面的代码即可在命令行窗口输
主要内容:C#和.Net Framework的关系,C#集成开发环境(IDE),在Linux或Mac OS上编写C#程序本节我们来介绍一下 C# 编程所需的工具,前面我们已经提到 C# 是 .Net Framework 的一部分,可以用来编写 .Net 应用程序,在介绍运行 C# 程序所需的工具之前,我们先来了解一下 C# 和 .Net Framework 之间到底是什么关系。 C#和.Net Framework的关系 .Net Framework 是一个平台,它提供了一个跨语言的统一编程环境。
主要内容:将派生类对象赋值给基类对象,将派生类指针赋值给基类指针,将派生类引用赋值给基类引用在 C/ C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍。例如: 输出结果为 10,编译器会将小数部分直接丢掉(不是四舍五入)。再如: 输出结果为 10.
主要内容:析构函数的执行时机创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存、关闭打开的文件等,这个函数就是析构函数。 析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个 符号。 注意:析构函数没有参数,
主要内容:构造函数的重载,默认构造函数在 C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是 构造函数(Constructor)。 在《 C++类成员的访问权限以及类的封装》一节中,我们通过成员函数 setname()、setage()、setscore() 分别为成员变量 name、age、score 赋值,这样做虽然有效,但显得有点
函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行。 一个 C/ C++ 程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条,这个链条的起点是 main(),终点也是 ma
一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。 例如小李和小韩都参与了一个文件管理系统的开发,它们都定义了一个全局变量 fp,用来指明当前打开的文件,将他们的代码整合在一起编译时,很明显编译器会提示 fp 重复定义(Redefinition)错误。 为了解决合作开发
主要内容:位域的存储,无名位域有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的 数据结构。 在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这就是位域。请看下面的例子: 后面的数字用来限定成员变量占用的位数。成员 m 没有限制,根据数据类型即可推算出它占
我得到了这段代码,我必须选择正确的答案。 现在: a)y值升为幂 b)x所在单元的地址 c)可变单元地址y d)值5 当我在程序中输入它时,我只是弹出,但我不知道那是不是正确的答案。
我最近开始学习C++,以前我是用围棋编程的。 我最近被告知不应该使用,因为抛出的异常可能会导致分配的内存不是D并导致内存泄漏。一个流行的解决方案是RAII,我找到了一个很好的解释为什么要使用RAII以及它在这里是什么。 然而,从Go开始,整个RAII的事情似乎是不必要的复杂。Go有一个叫做defer的东西,它以一种非常直观的方式解决了这个问题。您只需将作用域结束时要执行的操作包装在中,例如或,它将