频道栏目
读书频道 > web开发 > .NET > Visual C++ .NET程序设计教程(第2版)
3.3.3 多维数组
2012-11-26 15:09:17     我来说两句
收藏   我要投稿
本书以Visual C++ .NET为平台介绍程序设计方法。第一部分为教程,首先介绍Visual C++ .NET开发环境,然后介绍C++/CLI语言基础和C++/CLI面向对象编程基础,在这个基础上系统介绍Visual C++ .NET应用程序设计...  立即去当当网订购

在C++/CLI中创建的数组可以是二维或多维数组,但最多只能有32维。在创建多维数组时,只需在定义时的尖括号(“<>”)中元素类型后面指定相应的维数即可,类型与维数之间用逗号(“,”)隔开;若不指定维数,就像前面创建的数组,默认为一维数组。

下面来看一条语句,它是创建了一个4行5列的二维数组,总共有20个元素:

array<int, 2>^ values = gcnew array<int, 2>(4, 5);

当然,对于多维数组元素引用时,它有别于本地C++多维数组。在访问CLR多维数组元素时,需指定多个索引值,每一维1个,这些索引值必须写在数组名后面的方括号内,中间用逗号隔开。例如,若访问CLR二维数组中第i行、第j列的元素,则需通过“[i,j]”的形式来访问,如下面的代码:
int nrows = 4; 
int ncols = 5; 
array<int, 2>^ values = gcnew array<int, 2>(nrows, ncols); 
for(int i = 0 ; i<nrows ; i++) 
    for(int j = 0 ; j<ncols ; j++)   
        values[i,j] = (i+1)*(j+1);

下面再来看一个例子,它是在main函数中创建一个二维数组,并将9×9乘法表保存到该数组中,然后输出该二维数组。

【例Ex_Table】使用二维数组
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
 const int SIZE = 9; 
 array<int, 2>^ table = gcnew array<int, 2>(SIZE,SIZE);  
 for (int i = 0 ; i < SIZE ; i++) 
  for(int j = 0 ; j < SIZE ; j++) 
   table[i,j] = (i+1)*(j+1);
 // 输出表头 
 Console::WriteLine( L"{0}x{0}乘法表:", SIZE );
 Console::Write(L"    |"); 
 for(int i = 1 ; i <= SIZE ; i++) 
  Console::Write(L"{0,3} |", i); 
 Console::WriteLine();      // 换行  
 // 画表头水平线 
 for(int i = 0 ; i <= SIZE ; i++) 
  Console::Write(L"----|"); 
 Console::WriteLine();      // 换行 
 for(int i = 0 ; i<SIZE ; i++)  { 
  Console::Write(L"{0,3} |", i+1); 
  for(int j = 0 ; j<SIZE ; j++) 
   Console::Write(L"{0,3} |", table[i,j]);  
  Console::WriteLine();     // 换行 
 } 
 return 0;
}

编译运行,结果如下:

9x9乘法表:
    |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |
----|----|----|----|----|----|----|----|----|----|
  1 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |
  2 |  2 |  4 |  6 |  8 | 10 | 12 | 14 | 16 | 18 |
  3 |  3 |  6 |  9 | 12 | 15 | 18 | 21 | 24 | 27 |
  4 |  4 |  8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 |
  5 |  5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
  6 |  6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 |
  7 |  7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 |
  8 |  8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 |
  9 |  9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 |

需要说明的是,本地C++数组不管维数多少,其元素所占的空间在内存中是按低维到高维的次序顺序排列的。这就是说,本地C++数组的等级实际上总是为1。而C++/CLI数组却不同,它是真正的多维数组。例如,前面的table就是一个等级为2的C++/CLI二维数组,在引用元素时不能只指定1个索引值。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.3.2 数组的排序及查找
下一篇:3.3.4 数组的数组
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站