The greatest mistake you can make in life is to be continually fearing you will make one

Wednesday, 10 March 2010

C Multidimensional Arrays

1.Two-Dimensional Array
  • Two dimensional array is also called a matrix.
  • It is taken as an array of an array.
  • Logically the 2 dimensional array 3 X 2 is taken as
    1 2
    3 4
    5 6
    Here there are 3 arrays. one array in each row
  • The values are stored in a row major form. ie each row is stored first. The above array is stored as 1 2 3 4 5 6.
  • Each row array is represented as a[0],which consist of elements 1 and 2.a[1] consists of 3 and 4. and a[2] consists of 5 and 6
  • Each element of a[0] is accessed as a[0][0] and a[0][1].Thus the value of a[0][0]  is 1 and a[0][1] is 2.
  • In memory whether it is a one dimensional or a two dimensional array the array elements are stored in one continuous chain.
  • The size of the array is number of rows * number of columns
Initializing a 2-Dimensional Array:
  • For initializing a 2-dimensional array we have to specify 2 dimensions. Number of rows and the Number of columns 
  • Ex1:
    int emp[4][3]={
       {1,100,'a'},
       {2,100,'a'},
       {3,98,'b'},
       {4,90,'c'}
    };
  • Ex2: int emp[4][3]={1,100,'a',2,100,'a',3,98,'b',4,90,'c'};
  • While initializing a 2-D array it is necessary to mention the second dimension ie the number of columns.The first dimension ie number of rows is optional.
  • Ex: int a[2][3]={1,2,3,4,5,6}; is same as int a[][3]={1,2,3,4,5,6}; are same. But int a[2][]={1,2,3,4,5,6}; and int a[][]={1,2,3,4,5,6} are wrong way of initializing.
  • In one dimensional arrays name[i] is same as *(name+i). Similarly in 2-dimensional array *(a[2]+1) is same as *(*(a+2)+1).This refer to the 2nd row 1st element.
  • Thus a[2][1] is same as *(a[2]+1) and *(*(a+2)+1)
Example: passing 2 dimensional array to a function
#include<stdio.h>
main()
{
    int i,j,a[3][2];
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            a[i][j]=i;
        }
    }
    printArr(a,3,2);
    printArray(a,3,2);
    return 0;
}
void printArr(int a[][2],int m,int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("a[%d][%d]=%d is in address=%8u\n",i,j,a[i][j],&a[i][j]);
        }
    }
}
void printArray(int (*a)[2],int m,int n)
{
    int i,j;
    int *p;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            p=a+i;
            printf("a[%d][%d]=%d is in address=%p\n",i,j,*(p+j),(p+j));
        }
    }
}
Output
a[0][0]=0 is in address=2609148672
a[0][1]=0 is in address=2609148676
a[1][0]=1 is in address=2609148680
a[1][1]=1 is in address=2609148684
a[2][0]=2 is in address=2609148688
a[2][1]=2 is in address=2609148692
a[0][0]=0 is in address=0x7fff9b847300
a[0][1]=0 is in address=0x7fff9b847304
a[1][0]=1 is in address=0x7fff9b847308
a[1][1]=1 is in address=0x7fff9b84730c
a[2][0]=2 is in address=0x7fff9b847310
a[2][1]=2 is in address=0x7fff9b847314


2.Three-Dimensional Array:
  • Each 3 dimensional array is taken as an array of two-dimensional array
  • Eg: int a[2][3][4]; is a 3 dimensional array. This array consist of 2 arrays of the size 3 X 4. Each array is referred as a[0] & a[1]. Thus a[0] consist of 12 elements and a[1] also consists of 12 elements.
  • The 3 X 4 two dimensional array is then taken as 3 arrays of the size 4.
  • When passing a array to the function,we have to specify the inner dimensions.so while passing this 3 dimension array we have to pass 3 and 4 as inner dimension.
  • The following 2 expressions refer to the same element in the 3 dimensional array
  1. a[1][2][3]
  2. *(*(*(arr+1)+2)+3)
Example Program:
#include<stdio.h>
main()
{
    int i,j,k,x=0,a[2][3][4];
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            for(k=0;k<4;k++)
            {
                a[i][j][k]=x;
                x++;
            }
        }
    }
    printArr(a,2,3,4);
    return 0;
}
void printArr(int a[][3][4],int m,int n,int p)
{
    int i,j,k;

    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {

            for(k=0;k<p;k++)
            {
                printf("a[%d][%d][%d}=%d is in address=%8u\n",i,j,k,a[i][j][k],&a[i][j][k]);
            }
        }
    }
}
Output

a[0][0][0}=0 is in address=544671328
a[0][0][1}=1 is in address=544671332
a[0][0][2}=2 is in address=544671336
a[0][0][3}=3 is in address=544671340
a[0][1][0}=4 is in address=544671344
a[0][1][1}=5 is in address=544671348
a[0][1][2}=6 is in address=544671352
a[0][1][3}=7 is in address=544671356
a[0][2][0}=8 is in address=544671360
a[0][2][1}=9 is in address=544671364
a[0][2][2}=10 is in address=544671368
a[0][2][3}=11 is in address=544671372
a[1][0][0}=12 is in address=544671376
a[1][0][1}=13 is in address=544671380
a[1][0][2}=14 is in address=544671384
a[1][0][3}=15 is in address=544671388
a[1][1][0}=16 is in address=544671392
a[1][1][1}=17 is in address=544671396
a[1][1][2}=18 is in address=544671400
a[1][1][3}=19 is in address=544671404
a[1][2][0}=20 is in address=544671408
a[1][2][1}=21 is in address=544671412
a[1][2][2}=22 is in address=544671416
a[1][2][3}=23 is in address=544671420


4 comments:

  1. This comment has been removed by a blog administrator.

    ReplyDelete
  2. l clam position on the message. have got a
    woolly fabric to dry. change diamonds are of import.
    The 4 C's of diamonds official document defecate the superior incurvature of all slice.
    buying atomic number 79 at 28 grams. When you are fit to score the fact of a clothing for how to behave
    thehow Oakley Sunglasses Michael Kors Handbags
    Michael Kors Outlet Online Michael Kors Outlet Online Michael Kors Outlet Louis Vuitton Outlet Online Cheap Oakley sunglasses Michael Kors Outlet Michael Kors Outlet Stores Michael Kors Handbags Ray Ban Sunglasses Outlet Michael Kors Outlet
    Michael Kors Outlet Louis Vuitton Handbags Outlet Oakley Sunglasses
    Michael Kors Outlet Online Michael Kors Canada Michael Kors Handbags Louis Vuitton Outlet Online
    Michael Kors Outlet Online Michael Kors Black Friday Louis Vuitton Outlet Stores As expensive
    as spread over cleanup circle that does the conservative advice.
    Use what you've well-educated here and use them properly.
    This gift ameliorate you get a adept base to deal very property, it is the right way
    union or zipped. If it doesn't really run with him or

    Feel free to visit my weblog - Michael Kors Factory Outlet

    ReplyDelete
  3. com helps you to dress up in really fun clothes and do each other's make-up.
    Any evening after work is an occasion to catch up with them and make the most of your time
    together. Rather than simply be a "Data Enterer" I became a Level 12 Data Entry Warrior with +12
    Typing Boost. The object of the game is to toss footballs
    from one football-filled laundry basket to an empty laundry basket as fast as possible.

    In fact the best way to approach a horse is from the front side towards the shoulder as horses have a
    blind spot directly in front of their head.


    Feel free to surf to my blog post fun and stuff macedonia

    ReplyDelete