首页 > 程序开发 > 软件开发 > C++ >

C++ VS C#(5):数组

2010-12-17

//=====================================================================//TITLE://    C++ VS C#(5):数组//AUTHOR://    norains//DATE://    Monday  13-December-2010//Envi

//=====================================================================
//TITLE:
// C++ VS C#(5):数组
//AUTHOR:
// norains
//DATE:
// Monday 13-December-2010
//Environment:
// Visual Studio 2010
// Visual Studio 2005
//=====================================================================

1. 数组


C++和C#都是用“[]”来表示数组,只不过不同的是,一个是在后,一个是在前,如://C++
int Age[] = {5};

//C#
int []Age = {5};


如果要指定数组的大小,C++可以在“[]”中直接填入数字,而C#必须重新new一次,如://C++
int Age[10];

//C#
//int [10]Age}; 无法编译通过
int[] Age = new int [10];//可以编译通过


另外,这两者语言都可以指定数组的大小,但这里有个区别,C#中数组大小必须要和元素个数相匹配,如://C++
int Age[10] = {5,10};

//C#,无法编译通过
int[] Age = new int[10] { 5, 10 };


C++能通过,是因为它可以自动给没有赋值的元素自动给予0的数值,而C#则必须要一一指定,所以代码只能这样://C#,数组大小和元素个数相等,能够编译通过
int[] Age = new int[2] { 5, 10 };

在C++的时候,是不是经常碰到数组越界的情况?但在C#中,如果你只是想读取数值,那么使用foreach完全就可以不用担心这个问题,如:int[] Age = new int[5] { 5, 10,1,2,3 };
foreach (int Val in Age)
{
Console.WriteLine("{0}",Val);
}

这里只需要注意一点,声明的Val是只读,如果强行赋值会出错,如:int[] Age = new int[5] { 5, 10,1,2,3 };
foreach (int Val in Age)
{
Val = 5;//会出错
}

如果要对数组进行赋值,就不能使用foreach,而只能是for了。

这两种语言,都支持多维数组,当然声明就是大相径庭了,以二维数组为例://C++
byte Array[2][3] = {{00,01,02},
{10,11,12}};

//C#
byte[,] Array = {{00,01,02},
{10,11,12}};


C#的数组还有一个很有意思的特性,就是数组的数组,也就是很多教科书上所说的变长数组。多维数组和变长数组的区别在于,前者以“,”分隔,而后者是以多个“[]”分隔,如:byte[][] Array = { new byte[10],
new byte[20],
new byte[30]};
byte Value = Array[1][10];

但在C++很多教科书里,却很少提到数组的数组这个词语,是不是C++不支持呢?答案当然不是,因为数组的数组在C++里其实也就是数组的概念,对于上面的C#代码,C++中可以变更表示如下: byte* Array[] = {new byte [10],
new byte [20],
new byte [30]};
byte Value = Array[1][10];

为什么C++里面没有特意的声明变长数组的语法,但却能实现C#的相应的功能呢?其实很简单,并不是C++不能,而是C#不行。这个就要从指针说起,因为C#为了更安全,所以取消了指针这个遭人诟病的隐患,而C++的这个实现,其本质是存储指针的数组,正因为如此,取消了指针的C#就不能使用声明多维数组的方式来实现变长数组,所以才会独立出一个声明变长数组的语法。

相关文章
最新文章
热点推荐