#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