Returning an Array of Pointers

Code examples of manipulating an array of pointers. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLIST 10 struct ipList { int id; char *name; char *ip; }; struct ipList **getList( void ); void printList( struct ipList **list ); int main( void ) { struct ipList **theList; theList = getList( ); printList( theList ); return 0; } struct ipList **getList( void ) { struct ipList **list; int i; list = malloc( MAXLIST * sizeof( struct ipList * ) ); i = 0; while ( i < MAXLIST ) { list[ i ] = malloc( sizeof( struct ipList ) ); list[ i ]->id = i; list[ i ]->name = "citibank.co.cx"; list[ i ]->ip = "209.249.147.15"; i++; } return ( list ); } void printList( struct ipList **list ) { int i = 0; while ( i < MAXLIST ) { printf( "%s - %s", ( list[ i ]->name ), ( list[ i ]->ip ) ); i++; } }

we can change the function getList slightly:

struct ipList **getList( void ) { static struct ipList *list[ MAXLIST ]; int i; //list = malloc( MAXLIST * sizeof( struct ipList * ) ); i = 0; while ( i < MAXLIST ) { list[ i ] = malloc( sizeof( struct ipList ) ); list[ i ]->id = i; list[ i ]->name = "citibank.co.cx"; list[ i ]->ip = "209.249.147.15"; i++; } return ( list ); }

or we could have the main array created in main like this:

#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLIST 10 struct ipList { int id; char name[ 35 ]; char ip[ 15 ]; }; void getList( struct ipList *list[ ] ); struct ipList *makeIP( void ); void printList( struct ipList *list[ ] ); int main( void ) { struct ipList *theList[ MAXLIST ]; getList( theList ); printList( theList ); return 0; } void getList( struct ipList *list[ ] ) { int i = 0; while ( i < MAXLIST ) { list[ i ] = makeIP( ); list[ i ]->id = i; strcpy( ( list[ i ]->name ), "citibank.co.cx" ); strcpy( ( list[ i ]->ip ), "209.249.147.15" ); i++; } } struct ipList *makeIP( void ) { struct ipList *temp; temp = malloc( sizeof( struct ipList ) ); return ( temp ); } void printList( struct ipList *list[ ] ) { int i = 0; while ( i < MAXLIST ) { printf( "%s - %s", ( list[ i ]->name ), ( list[ i ]->ip ) ); i++; } }

posted by dharh 9:59 PM Oct 2nd, 2006



2011: 5 3 1
2010: 12 9 7 1
2009: 12 11 8 5
2008: 12 5 4 3 2 1
2007: 12 11 10 9 8 7 6 5 4 3 2 1
2006: 12 11 10 9 8 7 6 5 4 3 2 1
2005: 12 10 7 6
2004: 10 9 6 5 4 3 2 1