Initial pgm
void assign( int **mat, int n, int m ) {
int **p = mat;
int **p_end = p + n;
for ( ; p < p_end; ++p ) {
int *q = *p;
int *q_end = q + m;
for ( ; q < q_end; ++q ) {
printf( "Give an integer: " );
scanf( "%d", q );
}
}
}
modified pgm
void assign_V2( int **mat, int n, int m) {
int **p = mat;
for ( ; p < p + n; ++p )
{
int *q = *p;
for ( ; q < q + m; ++q )
{
printf( "Give an integer: " );
scanf( "%d", q );
}
}
}
Introduce p+n and q+m in the for loop. Execution: it keeps asking me "Give an integer". Address incrementation problem ? Thanks.
This for loop
for ( ; p < p + n; ++p )
is incorrect because p
is always less than p + n
(of course provided that n
keeps a positive number) within the for loop by the value n * sizeof( int * )
or strictly speacking the code invokes undefined behavior.
Opposite to the second code snippet in the first code snippet the value of p_end
is initially fixed and does not depend on the value of p
within the for loop.
int **p_end = p + n;
for ( ; p < p_end; ++p ) {