Microsoft KB Archive/102391

From BetaArchive Wiki

HOWTO: Create Two-Dimensional Arrays with Operator new

Article ID: Q102391

The information in this article applies to:

  • Microsoft C/C++ for MS-DOS, version 7.0
  • Microsoft Visual C++ for Windows, versions 1.0, 1.5
  • Microsoft Visual C++, 32-bit Edition, versions 1.0, 2.0, 2.1, 4.0, 5.0

SUMMARY

The code example below demonstrates creating a two-dimensional array using the C++ operator new. For more information on creating a two- dimensional array in C with the malloc() function, please search in the Microsoft Knowledge Base on the following words:

   dynamic memory allocation two dimensional array

MORE INFORMATION

To conceptualize a two-dimensional array, consider a one-dimensional array of one-dimensional arrays. To construct a two-dimensional array, first allocate an array of pointers to pointers. Then, index through the first array and allocate additional one-dimensional arrays.

The first code example below copies command-line arguments into a two- dimensional array. The first dimension represents the total number of command-line arguments. The second dimension has a variable length and represents the length of each command-line argument.

The second code example below dynamically creates a two-dimensional array of integers where user input specifies the size of each dimension. The example also initialized the array to contain random values and displays the contents of the array.

Sample Code 1

   /*
    * Compiler options needed: None
    */ 

   #include <iostream.h>
   #include <new.h>
   #include <string.h>

   char **TwoDArray;

   void main(int argc, char **argv)
   {
      // Allocate the first dimension.
      TwoDArray = new char*[argc];

      for (int i = 0; i < argc; i++)
         {
         // Allocate the second dimension
         TwoDArray[i] = new char[strlen(argv[i]) + 1];
         strcpy(TwoDArray[i], argv[i]);
         }

      cout << "This is the command line that was passed in:" << endl;
      for (i = 0; i < argc; i++)
         {
         cout << "argv[" << i << "] = ";

         // Print the command line arguments one at a time.
         for (unsigned j = 0; j <= strlen(TwoDArray[i]); j++)
            cout << TwoDArray[i][j];
         cout << endl;
         }

      // Delete the 2D array
      for (i = 0; i < argc; i++)
         delete [] TwoDArray[i];
      delete [] TwoDArray;
   }

Sample Code 2

   /*
    * Compiler options needed: None
    */ 

   #include <iostream.h>
   #include <new.h>
   #include <stdlib.h>
   #include <time.h>

   int **MyArray;

   void main(void)
   {
      int d1, d2, ndx1, ndx2;

      cout << "Enter the first array dimension: ";
      cin >> d1;
      cout << "Enter the second array dimension: ";
      cin >> d2;

      // Allocate memory for the array
      MyArray = new int*[d1];
      for (ndx1 = 0; ndx1 < d1; ndx1++)
         MyArray[ndx1] = new int[d2];

      // Fill the array with random integer values between 0 and 9
      srand((unsigned)time(NULL));
      for (ndx1 = 0; ndx1 < d1; ndx1++)
         for (ndx2 = 0; ndx2 < d2; ndx2++)
             MyArray[ndx1][ndx2] = rand() % 10;

      // Display the array
      for (ndx2 = 0; ndx2 < d2; ndx2++)
         cout << '\t' << "col " << ndx2;   // col #'s
      cout << endl;

      for (ndx1 = 0; ndx1 < d1; ndx1++)
         {
         cout << "row " << ndx1;           // row #'s

         for (ndx2 = 0; ndx2 < d2; ndx2++)
            {
            cout << '\t';
            cout << MyArray[ndx1][ndx2];
            }
         cout << endl;
         }

      // Delete the array
      for (ndx1 = 0; ndx1 < d1; ndx1++)
         delete [] MyArray[ndx1];
      delete [] MyArray;
   }

Additional query words: 8.00 8.00c

Keywords          : kbcode kbLangCPP kbVC 
Version           : WINDOWS:1.0,1.5; WINDOWS NT:1.0,2.0,2.1,4.0
Platform          : NT WINDOWS
Issue type        : kbhowto

Last Reviewed: October 2, 1997
© 1999 Microsoft Corporation. All rights reserved. Terms of Use.