C Program For Accessing Array Elements Using Pointers

#include <stdio.h>
#include <stdlib.h>
#include< conio.h>
int func1();
int func2();
int func3();
int func4();
int func5();

main()
{
    short mat[3][3],i,j;

    for(i = 0 ; i < 3 ; i++)
        for(j = 0 ; j < 3 ; j++)
        {
            mat[i][j] = i*10 + j;
        }

    printf(" Initialized data to: ");
    for(i = 0 ; i < 3 ; i++)
    {
        printf("\n");
        for(j = 0 ; j < 3 ; j++)
        {
            printf("%5.2d", mat[i][j]);
        }
    }
    printf("\n");

    func1(mat);
    func2(mat);
    func3(mat);
    func4(mat);
    func5(mat);
          getch();
}

 /*
 Method #1 (No tricks, just an array with empty first dimension)
 ===============================================================
 You don't have to specify the first dimension!
 */

int func1(short mat[][3])  
{
        register short i, j;

        printf(" Declare as matrix, explicitly specify second dimension: ");
        for(i = 0 ; i < 3 ; i++)
                {
                printf("\n");
                for(j = 0 ; j < 3 ; j++)
                {
                    printf("%5.2d", mat[i][j]);
                }
        }
        printf("\n");

        return;
}

 /*
 Method #2 (pointer to array, second dimension is explicitly specified)
 ======================================================================
 */

int func2(short (*mat)[3])
        {
        register short i, j;

        printf(" Declare as pointer to column, explicitly specify 2nd dim: ");
        for(i = 0 ; i < 3 ; i++)
                {
                printf("\n");
                for(j = 0 ; j < 3 ; j++)
                {
                    printf("%5.2d", mat[i][j]);
                }
        }
        printf("\n");

        return;
}

 /*
 Method #3 (Using a single pointer, the array is "flattened")
 ============================================================
 With this method you can create general-purpose routines.
 The dimensions doesn't appear in any declaration, so you
 can add them to the formal argument list.

 The manual array indexing will probably slow down execution.
 */

int func3(short *mat)   
        {
        register short i, j;

        printf(" Declare as single-pointer, manual offset computation: ");
        for(i = 0 ; i < 3 ; i++)
                {
                printf("\n");
                for(j = 0 ; j < 3 ; j++)
                {
                    printf("%5.2d", *(mat + 3*i + j));
                }
        }
        printf("\n");

        return;
}

 /*
 Method #4 (double pointer, using an auxiliary array of pointers)
 ================================================================
 With this method you can create general-purpose routines,
 if you allocate "index" at run-time.

 Add the dimensions to the formal argument list.
 */

int func4(short **mat)
        {
        short    i, j, *index[3];

        for (i = 0 ; i < 3 ; i++)
                index[i] = (short *)mat + 3*i;

        printf(" Declare as double-pointer, use auxiliary pointer array: ");
        for(i = 0 ; i < 3 ; i++)
                {
                printf("\n");
                for(j = 0 ; j < 3 ; j++)
                {
                    printf("%5.2d", index[i][j]);
                }
        }
        printf("\n");

        return;
}

 /*
 Method #5 (single pointer, using an auxiliary array of pointers)
 ================================================================
 */

int func5(short *mat[3])
        {
        short i, j, *index[3];
        for (i = 0 ; i < 3 ; i++)
                index[i] = (short *)mat + 3*i;

        printf(" Declare as single-pointer, use auxiliary pointer array: ");
        for(i = 0 ; i < 3 ; i++)
                {
                printf("\n");
                for(j = 0 ; j < 3 ; j++)
                {
                    printf("%5.2d", index[i][j]);
                }
        }
        printf("\n");
        return;
}


SAMPLE INPUT AND OUTPUT:

 Initialized data to:
   00   01   02
   10   11   12
   20   21   22
 Declare as matrix, explicitly specify second dimension:
   00   01   02
   10   11   12
   20   21   22
 Declare as pointer to column, explicitly specify 2nd dim:
   00   01   02
   10   11   12
   20   21   22
 Declare as single-pointer, manual offset computation:
   00   01   02
   10   11   12
   20   21   22
 Declare as double-pointer, use auxiliary pointer array:
   00   01   02
   10   11   12
   20   21   22
 Declare as single-pointer, use auxiliary pointer array:
   00   01   02
   10   11   12
   20   21   22
Share:

Total Pageviews

CONTACT US

Prof. Roshan P. Helonde
Mobile: +917276355704
WhatsApp: +917276355704
Email: roshanphelonde@rediffmail.com

Enter Project Title

Popular Projects

All Archive

Contact Form

Name

Email *

Message *