How to: Create Multidimension Arrays 

The first sample shows how to create multi-dimension arrays of reference, value, and native pointer types. It also shows how to return a multi-dimension array from a function and how to pass a multi-dimension array as an argument to a function.

The second sample shows how to perform aggregate initialization on a multi-dimension managed array.

Example

// mcppv2_mdarrays.cpp
// compile with: /clr
using namespace System;

#define ARRAY_SIZE 2

ref class MyClass {
public:
   int m_i;
};

// Returns a multidimensional managed array of a reference type.
array<MyClass^, 2>^ Test0() {
   int i, j;
   array< MyClass^, 2 >^ local = gcnew array< MyClass^, 
      2 >(ARRAY_SIZE, ARRAY_SIZE);

   for (i = 0 ; i < ARRAY_SIZE ; i++)
      for (j = 0 ; j < ARRAY_SIZE ; j++) {
         local[i,j] = gcnew MyClass;
         local[i,j] -> m_i = i;
      }

      return local;
}

// Returns a managed array of Int32.
array<Int32, 2>^ Test1() {
   int i, j;
   array< Int32,2 >^ local = gcnew array< Int32,2 >(
        ARRAY_SIZE, ARRAY_SIZE);

   for (i = 0 ; i < ARRAY_SIZE ; i++)
         for (j = 0 ; j < ARRAY_SIZE ; j++)
            local[i,j] = i + 10;

   return local;
}

int main() {   
   int i, j;

   // Declares multidimensional array of user-defined reference types 
   // and initializes in a function.
   array< MyClass^, 2 >^ MyClass0;
   MyClass0 = Test0();

   for (i = 0 ; i < ARRAY_SIZE ; i++)
      for (j = 0 ; j < ARRAY_SIZE ; j++)
         Console::WriteLine("MyClass0[{0}, {1}] = {2}", i, j, 
                             MyClass0[i,j] -> m_i);

   Console::WriteLine();

   // Declare an array of value types and initializes in a function.
   array< Int32, 2 >^ IntArray;
   IntArray = Test1();

   for (i = 0 ; i < ARRAY_SIZE ; i++)
         for (j = 0 ; j < ARRAY_SIZE ; j++)
            Console::WriteLine("IntArray[{0}, {1}] = {2}", i, j, 
            IntArray[i,j]);
}

Output

MyClass0[0, 0] = 0
MyClass0[0, 1] = 0
MyClass0[1, 0] = 1
MyClass0[1, 1] = 1

IntArray[0, 0] = 10
IntArray[0, 1] = 10
IntArray[1, 0] = 11
IntArray[1, 1] = 11

Example

This sample shows how to perform aggregate initialization on a multi-dimension managed array.

// mcppv2_mdarrays_aggregate_initialization.cpp
// compile with: /clr
using namespace System;

ref class G {
public:
   G(int i) {}
};

value class V {
public:
   V(int i) {}
};

class N {
public:
   N(int i) {}
};

int main() {
   // Aggregate initialize a multidimension managed array.
   array<String^, 2>^ gc1 = gcnew array<String^, 2>{ {"one", "two"}, 
       {"three", "four"} };
   array<String^, 2>^ gc2 = { {"one", "two"}, {"three", "four"} };

   array<G^, 2>^ gc3 = gcnew array<G^, 2>{ {gcnew G(0), gcnew G(1)}, 
       {gcnew G(2), gcnew G(3)} };
   array<G^, 2>^ gc4 = { {gcnew G(0), gcnew G(1)}, {gcnew G(2), gcnew G(3)} };

   array<Int32, 2>^ value1 = gcnew array<Int32, 2>{ {0, 1}, {2, 3} };
   array<Int32, 2>^ value2 = { {0, 1}, {2, 3} };

   array<V, 2>^ value3 = gcnew array<V, 2>{ {V(0), V(1)}, {V(2), V(3)} };
   array<V, 2>^ value4 = { {V(0), V(1)}, {V(2), V(3)} };

   array<N*, 2>^ native1 = gcnew array<N*, 2>{ {new N(0), new N(1)}, 
      {new N(2), new N(3)} };
   array<N*, 2>^ native2 = { {new N(0), new N(1)}, {new N(2), new N(3)} };
}

See Also

Reference

array