#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
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