C Language Progarm 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


Contact:
Mr. Roshan P. Helonde
Mobile: +91-7276355704
WhatsApp: +91-7276355704
Email: roshanphelonde@rediffmail.com
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 *