C - IntroductionC - Hello World ProgramC - Exercise 1C - Basic structure of a C programC - TokensC - Data TypesC - Type ConversionC - Exercise 2C - Character Input Output OperationsC - Input Output operation using scanf and printf functions

Operators

C - Arithmetic OperatorsC - Relational OperatorsC - Logical OperatorsC - Assignment OperatorsC - Increment Decrement OperatorsC - Bitwise Operators

Precedence and Associativity

C - Precedence and AssociativityC - Exercise 3

Conditions

C - If Else decision making statementsC - Switch Case decision making statements

Loop

C - While LoopC - Do While LoopC - For LoopC - Exercise 4

Array

C - ArraysC - Two Dimensional ArraysC - Multi Dimensional ArraysC - Exercise 5

String

C - StringC - Exercise 6C - String Manipulation

Functions

C - FunctionsC - Functions CategoryC - Function Call - Flow of ControlC - RecursionC - Functions and ArraysC - Functions and Strings

Structures

C - StructuresC - Structures and ArraysC - Passing structure to functionC - Function returning structureC - Structure in Structure

Pointers

C - PointersC - Pointers and VariablesC - Pointers and Variables Memory RepresentationC - Pointers Chaining

Pointers and Arrays

C - Pointers and One Dimensional ArrayC - Pointers and Two Dimensional ArrayC - Array of Pointers

Pointers and Strings

C - Pointers and Strings

Pointers and Functions

C - Pointers and Functions - Call by Value and Call by ReferenceC - Function returning pointer

Pointers and Structures

C - Pointers and StructuresC - Pointers and Array of StructuresC - Passing structure pointer to function

Handling Files

C - File Handling - Getting StartedC - File Handling - Read and Write CharactersC - File Handling - Read and Write IntegersC - File Handling - Read and Write multiple dataC - File Handling - Randomly Access Files

Command Line Arguments

C - Command Line Arguments

Dynamic Memory Allocation

C - Dynamic Memory Allocation - Getting StartedC - Dynamic Memory Allocation - malloc functionC - Dynamic Memory Allocation - calloc functionC - Dynamic Memory Allocation - realloc function

C - Two Dimensional Arrays

C Programming

In this tutorial we will learn about two dimensional array in C programming language.

We have already covered about what are arrays in the previous tutorial. Now, lets explore the two dimensional arrays.

So, from the previous tutorial we know that when we want to store one dimensional data like score of a single player in 5 matches we use one dimensional array.

Now, if we want to store two dimensional data like storing respective scores of 4 players for the 5 matches then we need the two dimensional array.

Syntax of a 2D Array

To create a two dimensional array we use the following syntax.

type arrName[rows][cols];

Example

int score[4][5];

In the above example we are creating an array named score of type int. It has 4 rows and 5 columns i.e., total 4x5 = 20 elements.

So, the above code will instruct the computer to allocate memory to store 20 elements of type int and we can represent the score array as shown below.

Array indexing starts from 0 so, in the above image there are 4 rows having index 0, 1, 2 and 3. And there are 5 columns having index 0, 1, 2, 3 and 4.

Assigning value to a 2D Array

We can assign value to a 2D array by targeting the cell using the row-index and col-index.

For example, if we want to assign 10 to element at row-index 0 and column-index 0 then we will write the following code.

score[0][0] = 10;

Similarly, if we want to assign lets say 50 to an element of an array at row-index 1 and column-index 3 then we will write the following code.

score[1][3] = 50;

Creating and initialising 2D array

There are a couple of ways we can create and initialise a 2D array in C.

In the following code we are creating a 2D array bonus of type int having 2 rows and 3 columns.

int bonus[2][3] = {
  1, 2, 3,
  4, 5, 6
};

In the above code 1, 2, 3 is for the first row and 4, 5, 6 is for the second row of the array bonus.

We can achive the same result by separating the rows with curly brackets { } as show below.

int bonus[2][3] = {
  {1, 2, 3},
  {4, 5, 6}
};

We can also skip elements and they will be auto filled with 0s.

In the following example we are creating an array bonus of type int having 2 rows and 3 columns but this time we are initialising only few elements.

int bonus[2][3] = {
  {1, 2},
  {3}
};

The above code will create the bonus array having 2 rows and 3 columns and we will get the following initialisation.

int bonus[2][3] = {
  {1, 2, 0},
  {3, 0, 0}
};

If we want to initialise all elements of a row to lets say 0 then we can write the following.

int bonus[2][3] = {
  {0},
  {0}
};

So, the above code will give us the following result.

int bonus[2][3] = {
  {0, 0, 0},
  {0, 0, 0}
};

Now, before we end this tutorial lets write a program in C to take score of 4 players for 5 matches and print them out.

/**
 * file: 2d-array.c
 * author: yusuf shakeel
 * date: 2010-12-21
 * description: 2d array program
 */

#include <stdio.h>
int main(void)
{
  //variable
  int
    score[4][5],
    r, c;

  //user input
  for (r = 0; r < 4; r++) {
    printf("Enter 5 scores of Player #%d: ", (r + 1));
    for (c = 0; c < 5; c++) {
      scanf("%d", &score[r][c]);
    }
  }
  
  //output
  printf("You have entered the following:\n");
  for (r = 0; r < 4; r++) {
    printf("---------- Score of Player #%d ----------\n", (r + 1));
    for (c = 0; c < 5; c++) {
      printf("Match #%d\tScore: %d\n", (c + 1), score[r][c]);
    }
  }
  
  printf("End of code\n");
  return 0;
}

Output

Enter 5 scores of Player #1: 11 12 13 14 15
Enter 5 scores of Player #2: 21 22 23 24 25
Enter 5 scores of Player #3: 31 32 33 34 35
Enter 5 scores of Player #4: 41 42 43 44 45
You have entered the following:
---------- Score of Player #1 ----------
Match #1	Score: 11
Match #2	Score: 12
Match #3	Score: 13
Match #4	Score: 14
Match #5	Score: 15
---------- Score of Player #2 ----------
Match #1	Score: 21
Match #2	Score: 22
Match #3	Score: 23
Match #4	Score: 24
Match #5	Score: 25
---------- Score of Player #3 ----------
Match #1	Score: 31
Match #2	Score: 32
Match #3	Score: 33
Match #4	Score: 34
Match #5	Score: 35
---------- Score of Player #4 ----------
Match #1	Score: 41
Match #2	Score: 42
Match #3	Score: 43
Match #4	Score: 44
Match #5	Score: 45
End of code