//=====================================================================
//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#就不能使用聲明多維數組的方式來實現變長數組,所以才會獨立出一個聲明變長數組的語法。