c - Matrix as function parameter -
why when using matrix parameter of function must specify number of columns don't have indicate number of rows?
i assume you're talking function definition like
void foo( int matrix[][cols] ) { ... }
this requires little background...
except when operand of sizeof
or unary &
operators, or string literal being used initialize array in declaration, expression of type "n-element array of t
" converted ("decay") expression of type "pointer t
", , value of expression address of first element of array. so, given declaration
int arr[10];
the expression arr
have type "10-element array of int
"; unless expression operand of sizeof
or unary &
operators, converted ("decay") expression of type "pointer int
". if pass array function, like
blurga( arr );
what blurga
receives pointer int
, not array of int
. can define blurga
as
void blurga( int *ap ) { // ap[i] }
the formal parameter ap
has type "pointer int
". note can use []
operator on pointer expressions array expressions1.
now, in context of formal parameter declaration, t a[n]
, t a[]
interpreted t *a
; 3 declare a
pointer t
, not array of t
. can rewrite function definition as
void blurga( int ap[] ) { // ap[i] }
again, int ap[]
interpreted same int *ap
.
now let's @ two-dimensional array:
int blah[10][10];
the expression blah
has type "10-element array of 10-element array of int
". going conversion rule above, expression blah
decay expression of type "pointer 10-element array of int
", or int (*)[10]
. if pass blah
function, function receives pointer array, not array of arrays:
void bletch( int (*barr)[10] );
as before t a[]
interpreted t *a
, can write declaration as
void blech( int barr[][10] ); // barr[] == (*bar)
just remember barr
pointer type, not array type.
1. in fact,
a[i]
defined result of *(a + i)
; given pointer value a
, offset i
elements address , dereference result. basically, conversion rule still applies; array expression a
being converted pointer expression, , pointer expression []
being applied to.
Comments
Post a Comment