C++ VS C#(5):數組

來源:互聯網
上載者:User

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

 

1. 數組

    C++和C#都是用“[]”來表示數組,只不過不同的是,一個是在後,一個是在前,如://C++<br />int Age[] = {5};</p><p>//C#<br />int []Age = {5};<br />

    如果要指定數組的大小,C++可以在“[]”中直接填入數字,而C#必須重新new一次,如://C++<br />int Age[10];</p><p>//C#<br />//int [10]Age}; 無法編譯通過<br />int[] Age = new int [10];//可以編譯通過<br />

 

    另外,這兩者語言都可以指定數組的大小,但這裡有個區別,C#中數組大小必須要和元素個數相匹配,如://C++<br />int Age[10] = {5,10};</p><p>//C#,無法編譯通過<br />int[] Age = new int[10] { 5, 10 };<br />

    C++能通過,是因為它可以自動給沒有賦值的元素自動給予0的數值,而C#則必須要一一指定,所以代碼只能這樣://C#,數組大小和元素個數相等,能夠編譯通過<br />int[] Age = new int[2] { 5, 10 };

 

    在C++的時候,是不是經常碰到數組越界的情況?但在C#中,如果你只是想讀取數值,那麼使用foreach完全就可以不用擔心這個問題,如:int[] Age = new int[5] { 5, 10,1,2,3 };<br />foreach (int Val in Age)<br />{<br /> Console.WriteLine("{0}",Val);<br />}

    這裡只需要注意一點,聲明的Val是唯讀,如果強行賦值會出錯,如:int[] Age = new int[5] { 5, 10,1,2,3 };<br />foreach (int Val in Age)<br />{<br /> Val = 5;//會出錯<br />}

    如果要對數組進行賦值,就不能使用foreach,而只能是for了。

 

    這兩種語言,都支援多維陣列,當然聲明就是大相徑庭了,以二維數組為例://C++<br />byte Array[2][3] = {{00,01,02},<br /> {10,11,12}};</p><p>//C#<br />byte[,] Array = {{00,01,02},<br /> {10,11,12}};<br />

 

    C#的數組還有一個很有意思的特性,就是數組的數組,也就是很多教科書上所說的變長數組。多維陣列和變長數組的區別在於,前者以“,”分隔,而後者是以多個“[]”分隔,如:byte[][] Array = { new byte[10],<br /> new byte[20],<br /> new byte[30]};<br />byte Value = Array[1][10];

    但在C++很多教科書裡,卻很少提到數組的數組這個詞語,是不是C++不支援呢?答案當然不是,因為數組的數組在C++裡其實也就是數組的概念,對於上面的C#代碼,C++中可以變更表示如下: byte* Array[] = {new byte [10],<br /> new byte [20],<br /> new byte [30]};<br />byte Value = Array[1][10];

    為什麼C++裡面沒有特意的聲明變長數組的文法,但卻能實現C#的相應的功能呢?其實很簡單,並不是C++不能,而是C#不行。這個就要從指標說起,因為C#為了更安全,所以取消了指標這個遭人詬病的隱患,而C++的這個實現,其本質是儲存指標的數組,正因為如此,取消了指標的C#就不能使用聲明多維陣列的方式來實現變長數組,所以才會獨立出一個聲明變長數組的文法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.