Microsoft KB Archive/102391

{| = HOWTO: Create Two-Dimensional Arrays with Operator new =
 * width="100%"|

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   #include    #include 

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   #include    #include    #include 

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
 * }