当前位置: 首页 > 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自动机)
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • C语言笔记(第一章:C语言编程)
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JSONP原理
  • MYSQL 的 IF 函数
  • mysql_config not found
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • React-flux杂记
  • SpringBoot 实战 (三) | 配置文件详解
  • Spring核心 Bean的高级装配
  • vuex 学习笔记 01
  • yii2权限控制rbac之rule详细讲解
  • 区块链共识机制优缺点对比都是什么
  • 通过git安装npm私有模块
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • (a /b)*c的值
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • .net core控制台应用程序初识
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .netcore 获取appsettings
  • @Mapper作用
  • @ModelAttribute使用详解
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [CSDN首发]鱿鱼游戏的具体玩法详细介绍
  • [CSS]浮动
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)