当前位置: 首页 > news >正文

(原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)

Abstract
C++不能用new直接動態建立二維陣列,但在C#可以了!!

Introduction
在(原創) 如何動態建立二維陣列(多維陣列)? (高級) (C++)中,我們發現C++無法用

None.gif int   ** ia  =   new   int [sizey][sizex];



None.gif int   * ia[sizex]  =   new   int [sizey][sizex];


動態建立二維陣列,但在C#可以了!!

 1 ExpandedBlockStart.gif ContractedBlock.gif /**/ /* 
 2InBlock.gif(C) OOMusou 2007 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : ArrayDynamicTwoDim.cs
 5InBlock.gifCompiler    : Visual Studio 2005 / C# 2.0
 6InBlock.gifDescription : Demo how to dynamic allocate 2 dim array
 7InBlock.gifRelease     : 02/25/2007 1.0
 8ExpandedBlockEnd.gif*/

 9 None.gif using  System;
10 None.gif
11 ExpandedBlockStart.gifContractedBlock.gif class  Foo  dot.gif {
12ExpandedSubBlockStart.gifContractedSubBlock.gif  static void func(int[,] ia) dot.gif{
13ExpandedSubBlockStart.gifContractedSubBlock.gif    for (int y = 0; y != ia.GetLength(0); ++y) dot.gif{
14ExpandedSubBlockStart.gifContractedSubBlock.gif      for (int x = 0; x != ia.GetLength(1); ++x) dot.gif{
15InBlock.gif        Console.Write("{0} ",ia[y,x]);
16ExpandedSubBlockEnd.gif      }

17InBlock.gif      Console.WriteLine();
18ExpandedSubBlockEnd.gif    }

19ExpandedSubBlockEnd.gif  }

20InBlock.gif
21ExpandedSubBlockStart.gifContractedSubBlock.gif  public static void Main() dot.gif{
22InBlock.gif    const int sizex = 3;
23InBlock.gif    const int sizey = 2;
24InBlock.gif    int[,]ia = new int[sizey,sizex];
25InBlock.gif    
26ExpandedSubBlockStart.gifContractedSubBlock.gif    for(int y = 0; y != sizey; ++y) dot.gif{
27ExpandedSubBlockStart.gifContractedSubBlock.gif      for(int x = 0; x != sizex; ++x) dot.gif{
28InBlock.gif        ia[y,x] = y + x;
29ExpandedSubBlockEnd.gif      }

30ExpandedSubBlockEnd.gif    }

31InBlock.gif    
32InBlock.gif    func(ia);
33ExpandedSubBlockEnd.gif  }

34ExpandedBlockEnd.gif}


執行結果

None.gif 0   1   2
None.gif
1   2   3


24行

None.gif int [,]ia  =   new   int [sizey,sizex];


使用了new動態動態建立了二維陣列,這是一個很直觀的語法,至於int [,] ,這是C#二維陣列的宣告方式,有別於C++,代表C#是『真正』支援二維陣列。

12行

None.gif static   void  func( int [,] ia)


也不需要用pointer to pointer了,直接宣告一個二維陣列型態傳入即可,但這樣是傳進整個陣列嗎?在.NET,陣列屬於reference type,所以雖然語法看起來是value type,但骨子仍是傳pointer進去而已,C#是一個大量使用syntax sugar的語言。

Conclusion
C#身為晚C++多年的後輩,果真對C++多有改進,大幅降低語法本身的複雜度,可大幅降低學習曲線。

See Also
(原創) 如何動態建立二維陣列(多維陣列)? (C/C++) (C)
(原創) 如何動態建立二維陣列(多維陣列)? (C/C++)

相关文章:

  • Centos6.4_X64飞信安装
  • (轉貼) UML中文FAQ (OO) (UML)
  • spring MVC 3.1 forword/redirect
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • 为什么Maven会更改Eclipse JDK设置
  • C51中的INTRINS.H:内部函数
  • S3C2440与NAND FLASH(K9F1208)的接线分析
  • linux 6.2 部署nginx的过程
  • 成为Java高手需要达到的25个学习目标
  • 字符编码相关的知识
  • 远程读取XML根级别上的数据无效。 行 1,位置 1
  • 将DATAtable转换成 json格式
  • PHP之session相关实例教程与经典代码
  • HDU 3065 病毒侵袭持续中 (AC自动机)
  • [数据结构]链表的实现在PHP中
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 2019.2.20 c++ 知识梳理
  • Iterator 和 for...of 循环
  • js写一个简单的选项卡
  • Next.js之基础概念(二)
  • Nodejs和JavaWeb协助开发
  • Python 反序列化安全问题(二)
  • Python实现BT种子转化为磁力链接【实战】
  • Redux 中间件分析
  • Spring Cloud中负载均衡器概览
  • Vue学习第二天
  • 安卓应用性能调试和优化经验分享
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 基于游标的分页接口实现
  • 如何利用MongoDB打造TOP榜小程序
  • 学习笔记:对象,原型和继承(1)
  • 一个项目push到多个远程Git仓库
  • 赢得Docker挑战最佳实践
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • # centos7下FFmpeg环境部署记录
  • # Java NIO(一)FileChannel
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $GOPATH/go.mod exists but should not goland
  • (14)Hive调优——合并小文件
  • (42)STM32——LCD显示屏实验笔记
  • (C语言)fgets与fputs函数详解
  • (Java数据结构)ArrayList
  • (二)PySpark3:SparkSQL编程
  • (分布式缓存)Redis哨兵
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (一)插入排序
  • (转)C#调用WebService 基础
  • (转)VC++中ondraw在什么时候调用的
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET中的Exception处理(C#)
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面