© 2014 Firstsoft Technologies (P) Limited. login
Hi 'Guest'
Home SiteMap Contact Us Disclaimer
enggedu
Quick Links
Easy Studies

C Program For Accessing Array Elements Using Pointers

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

 
SLogix Student Projects


⇓Student Projects⇓
⇑Student Projects⇑
bottom