Answers/Solutions to Exercises in Chapter 7, Exercise 2

E2: Write a simple C program in which a two-dimensional dynamic arrays is used. Now add a function that adds a new row to the array. How complicated was it?

S2: A sample such program is below.

// function main ------------------------------------------
int main()
{
	int i, j, **array;

	array = (int**) malloc(sizeof(int*)*4);  // 4 rows
	for(i=0; i<4; i++) {
	 array[i]=(int*) malloc(sizeof(int)*3);  // 3 columns
	 for(j=0; j<3; j++)
	  array[i][j]=10*i+j;
	}
	for(i=0; i<4; i++)
	 for(j=0; j<3; j++)
	  printf("array[%d][%d]=%d\n",i,j,array[i][j]);

     return 0;
}// end main
 

Now add a function to add an extra row:

#include <stdlib.h>


// function add_row -----------------------------------------
void add_row(int** array,int rows)
{
	int j;

	// and a new row
	array = (int**) realloc(array,sizeof(int*)*(rows+1));  
	array[rows]=(int*) malloc(sizeof(int)*3);        
	for(j=0; j<3; j++)
	 array[rows][j]=10*rows+j;
}// end add_row


// function main ------------------------------------------
int main()
{
	int i, j, **array;

	array = (int**) malloc(sizeof(int*)*4);  // 4 rows
	for(i=0; i<4; i++) {
	 array[i]=(int*) malloc(sizeof(int)*3);  // 3 columns
	 for(j=0; j<3; j++)
	  array[i][j]=10*i+j;
	}
	for(i=0; i<4; i++)
	 for(j=0; j<3; j++)
	  printf("array[%d][%d]=%d\n",i,j,array[i][j]);

	// and a new row
	add_row(array,4);

	// now display it again
    for(i=0; i<5; i++)
	 for(j=0; j<3; j++)
	  printf("array[%d][%d]=%d\n",i,j,array[i][j]);

     return 0;
}// end main

It is simple, as long as add_row() "knows" the index of the last row. Because a dynamic two-dimensional array is in fact a linked data structure, it is simple to attach one more row to it, nothing else must be changed --- with the exception of the actual one-dimensional array of pointers to individual rows. That's why we need to you realloc() there.

Back to Answers/Solutions Index                          Back to Answers/Solutions for Chapter 7 Index