On May 11, 4:17=A0am, Barry Schwarz <schwar...@[EMAIL PROTECTED]
> wrote:
> On May 9, 8:35=A0pm, mdh <m...@[EMAIL PROTECTED]
> wrote:
>
>
> Depending on the type of p. =A0If arr is defined as T arr[N][M], then
> for your code to be legal, p must be a T**. =A0*p will then have type T*
> and arr[i] will be converted to &arr[i][0] which is also of type T*.
>
> Far more common is for p to be a T* and the assignment to read
> p =3D arr[i].
Well...I **think** I see it a little more clearly.
Although once admonished for writing code to figure things out, a weak
attempt follows.
#include <stdio.h>
int main (int argc, const char * argv[])
{
int i, j, k, l;
char arr [3][3] =3D {"One", "Two", "Lst"};
char *p;
char **q;
for ( i =3D 0; i < 3; i ++)
for ( j=3D 0; j < 3; j++)
{
p=3D&arr[i][j];
printf( "%p\n", p);
}
putchar('\n');
for ( k =3D 0; k < 3; k ++)
for ( l=3D 0; l < 3; l++)
{
p=3Darr[k];
q=3D&arr[k][l];
printf( "%s %s\n", p, q);
}
}
output:
0xbffff7cf
0xbffff7d0
0xbffff7d1
0xbffff7d2
0xbffff7d3
0xbffff7d4
0xbffff7d5
0xbffff7d6
0xbffff7d7
OneTwoLst=03 OneTwoLst=03
OneTwoLst=03 neTwoLst=03
OneTwoLst=03 eTwoLst=03
TwoLst=03 TwoLst=03
TwoLst=03 woLst=03
TwoLst=03 oLst=03
Lst=03 Lst=03
Lst=03 st=03
Lst=03 t=03
Which I think says, as mentioned above, that the addresses are
contiguous. So at least that is an easy visual and conceptual concept
to comprehend.
And to repeat what you put far more elegantly, more to see if I am
understanding it,
char *p in the context of the declaration arr[m][n], is a "row"
and char **q, is a character?


|