C++ VS C#(5):数组
//=====================================================================
//TITLE:
// C++ VS C#(5):数组
//AUTHOR:
// norains
//DATE:
// Monday 13-December-2010
//Environment:
// Visual Studio 2010
// Visual Studio 2005
//=====================================================================
1. 数组
C++和C#都是用“[]”来表示数组,只不过不同的是,一个是在后,一个是在前,如:
如果要指定数组的大小,C++可以在“[]”中直接填入数字,而C#必须重新new一次,如:
另外,这两者语言都可以指定数组的大小,但这里有个区别,C#中数组大小必须要和元素个数相匹配,如:
C++能通过,是因为它可以自动给没有赋值的元素自动给予0的数值,而C#则必须要一一指定,所以代码只能这样:
在C++的时候,是不是经常碰到数组越界的情况?但在C#中,如果你只是想读取数值,那么使用foreach完全就可以不用担心这个问题,如:
这里只需要注意一点,声明的Val是只读,如果强行赋值会出错,如:
如果要对数组进行赋值,就不能使用foreach,而只能是for了。
这两种语言,都支持多维数组,当然声明就是大相径庭了,以二维数组为例:
C#的数组还有一个很有意思的特性,就是数组的数组,也就是很多教科书上所说的变长数组。多维数组和变长数组的区别在于,前者以“,”分隔,而后者是以多个“[]”分隔,如:
但在C++很多教科书里,却很少提到数组的数组这个词语,是不是C++不支持呢?答案当然不是,因为数组的数组在C++里其实也就是数组的概念,对于上面的C#代码,C++中可以变更表示如下:
为什么C++里面没有特意的声明变长数组的语法,但却能实现C#的相应的功能呢?其实很简单,并不是C++不能,而是C#不行。这个就要从指针说起,因为C#为了更安全,所以取消了指针这个遭人诟病的隐患,而C++的这个实现,其本质是存储指针的数组,正因为如此,取消了指针的C#就不能使用声明多维数组的方式来实现变长数组,所以才会独立出一个声明变长数组的语法。