david wrote:
hi friends, don't understand this:
/*
**p is a pointer to *a[], but if *a stops increasing when reads abc,
where is pointing *p??
*/
#include <stdio.h>
int main(void)
{
char *a[] =3D {"abc", "def", "ghi", "jkl", NULL};
char **p;
p =3D (char **)a;
while (*p) {
while (**p) {
printf("*a=3D%p *p=3D%p %c %s\n", *a, *p, **p, *p);
(*p)++;
}
p++;
}
return 0;
}
/*
Returns
david@debian:~$ ./demo
*a=3D0x4005ec *p=3D0x4005ec a abc
*a=3D0x4005ed *p=3D0x4005ed b bc
*a=3D0x4005ee *p=3D0x4005ee c c
*a=3D0x4005ef *p=3D0x4005f0 d def -----Here *a stops inc, =BFwhere is
pointing *p?
[...]
*/
Here's the state of p and the elements of a. You're incrementing the
actual pointers in the array, then once they reach the nul terminator,
moving to the next pointer in the array. (view in a monospace font, like
Courier)
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ec *p=3D0x4005ec a abc
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ed *p=3D0x4005ed b bc
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ee *p=3D0x4005ee c c
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ef *p=3D0x4005f0 d def
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ef *p=3D0x4005f1 e ef
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ef *p=3D0x4005f2 f f
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ef *p=3D0x4005f4 g ghi
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ef *p=3D0x4005f5 h hi
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ef *p=3D0x4005f6 i i
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ef *p=3D0x4005f8 j jkl
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ef *p=3D0x4005f9 k kl
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^
*a=3D0x4005ef *p=3D0x4005fa l l
"abc\0" "def\0" "ghi\0" "jkl\0"
a[0]^ a[1]^ a[2]^ a[3]^ a[4]=NULL
p^