goto语句是一个极其“变态”的语句,不过你会喜欢。如前所述,goto语句可以使执行在代码行文中随意跳转,示例如下:
using System;
namespace Test
{
class Program
{
static void Main(string [] args)
{
Console.WriteLine("十步杀一人");
goto L1;
L2:
Console.WriteLine("事了拂衣去");
goto L3;
L1:
Console.WriteLine("千里不留行");
goto L2;
L3:
Console.WriteLine("深藏身与名");
}
}
}
运行结果:
十步杀一人
千里不留行
事了拂衣去
深藏身与名
看了上面的例子你是不是有点晕,这就是goto语句“变态”的地方。goto语句用于将程序执行流跳转到自定义标记点,标记点的定义如上面例子所示,采用“标记名称 冒号”的方式定义。上面的示例中,首先执行“十步杀一人”的显示语句,然后执行流跳转到L1标记处,显示“千里不留行”,再跳转到L2处显示“事了拂衣去”,最后跳转到L3标记处显示:“深藏身与名”,最后执行结束。从上面的代码中你也不难看出goto语句的代码非常难以阅读,也是因此goto语句在结构化编程中不提倡使用。
你必须了解的细节
到此,我们已经讨论完了C#大部分的基础语言元素。如前所述,这些语言元素包括变量、数据类型、表达式、控制流语句等,但是使用这些语言元素并不是那么简单,我们在前面的介绍中故意忽略掉一些细节部分。这些忽略的细节部分我们将在本节加以补充,除此之外,我们还将继续介绍常用的引用类型——数组(引用类型非常复杂,在后面的章节将继续介绍),以及和编写代码相关的一些知识,如怎样为代码添加注释等。
数组
在日常生活中我们经常使用成组的容器来存储东西,比如超市里的储物柜,比如我们家里的抽屉、书柜等,通常这些容器都由很多相同的格子组成,可以存储大量相似的东西。我们的程序语言中也有与之相似的存储结构,这就是数组。我们在前面介绍了变量,我们知道变量是用来存储特定数据类型数据的,假如现在要存储一个商品的价格我们需要声明一个浮点型变量,那么现在的问题是我们要存储100种商品价格,难道我们需要声明100个变量来存储吗?当然不需要;C#程序语言为我们提供了数组这样一种结构来完成这个任务。
C#中数组是在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型。数组按照存储数据的方式又可以分为一维数组和多维数组,最常用的就是一维和二维数组。一维数组用来存储一行元素,而二维数组存储结构相当于一个数据表。一维数组的元素呈线性排列,数组元素的个数决定数组的大小,如下所示:
二维数组元素的个数由行数和列数决定,元素个数=行数 x 列数,二维数组如下所示:
1.2
|
1.1
|
1.3
|
1.2
|
1.0
|
2.1
|
1.5
|
…
|
…
|
…
|
2.2
|
1.9
|
…
|
…
|
…
|
下面我们就来看看数组定义的方式:
一维数组:数据类型[] 数组名=new 数据类型[元素个数];
二维数组:数据类型[,] 数组名=new 数据类型[行数,列数];
如:
int [] prices=new int[5];
int [,] ids=new int[3,4];
你可以在定义数组的时候将数组初始化,初始化的方式如下:
一维数组:数据类型[] 数组名={元素1,元素2...};
二维数组:数据类型[,] 数组名={{第1行元素},{第2行元素},{}...};
如:
int [] prices={1, 2, 3, 4, 5};
定义二维数组并初始化为3行3列:
int [,] prices={{1, 2, 3}, {4, 5, 6},{7, 8, 9}};