| extern int printf (const char *,...); |
| |
| struct s { struct s *n; } *p; |
| struct s ss; |
| #define MAX 10 |
| struct s sss[MAX]; |
| int count = 0; |
| |
| void sub( struct s *p, struct s **pp ); |
| int look( struct s *p, struct s **pp ); |
| |
| main() |
| { |
| struct s *pp; |
| struct s *next; |
| int i; |
| |
| p = &ss; |
| next = p; |
| for ( i = 0; i < MAX; i++ ) { |
| next->n = &sss[i]; |
| next = next->n; |
| } |
| next->n = 0; |
| |
| sub( p, &pp ); |
| if (count != MAX+2) |
| abort (); |
| |
| exit( 0 ); |
| } |
| |
| void sub( struct s *p, struct s **pp ) |
| { |
| for ( ; look( p, pp ); ) { |
| if ( p ) |
| p = p->n; |
| else |
| break; |
| } |
| } |
| |
| int look( struct s *p, struct s **pp ) |
| { |
| for ( ; p; p = p->n ) |
| ; |
| *pp = p; |
| count++; |
| return( 1 ); |
| } |