Veamos el tema de punteros en c es peligroso, pero no es tabú, voy a hacer lo posible para que sea entendible, en c++ es mucho más sencillo ya que el preprocesador se encarga de hacer la magia. Partiendo de una estructura simple: struct ayuda { int m_nidayuda; const char * m_pcszayuda; }; struct ayuda stayuda; Comenzamos, hay muchas formas de hacer las cosas te recomiendo buscar libros y demás, acá hay una pequeña introducción ... si queres hacerte el loco y inicializar todo en cero podes de dos maneras ni bien definis la variable, struct ayuda stayuda = { 0,NULL }; y si tenes/queres un array, const int n = 2; struct ayuda stayuda2[n] = { {0, NULL}, {1,"ayuda"}}; y la segunda forma memset(&stayuda,0,sizeof(stayuda)); Lo más raro de este ejemplo es el ampersant (& o como se escriba) que define algo que podemos llamar "address of" lo cual es básicamente obtiene un puntero a la estructura, y sizeof es una macro de tiempo de compilación que obtiene el tamaño de la estructura. Después sin ir más lejos,,, para pasar un puntero a un estructura podes hacer cosas como: const ayuda * payuda = &stayuda; o tambien usar trampas de cast ( que son un peligro ) para hacer que todo funcione igual void * p = (void *) &stayuda; const ayuda * payuda = (const ayuda *) p; Los casteos son la herramienta más peligrosa pero ´sirven´ para pasar punteros a funciones. A la hora de crear structuras ( si NO tiene funciones, me refiero a esas estructuras de c++ en las cuales te espermitido overridear operadores y agregarles funciones ) podes también crearlas mediante el calloc y malloc: const ayuda * payuda = (const ayuda *) calloc(sizeof(ayuda),1); y si es un array int n = 2 const ayuda * payuda2 = (const ayuda *) calloc(sizeof(ayuda),n); a lo que podes jugar con los elemntos del array de muchas maneras. for (int x = 0; x < n; x++) { // forma facil payuda2[x].m_nidayuda = x; // forma absurdamente complicada de casteos (*(struct ayuda *)( payuda2 + ( x * sizeof(ayuda) ) ))).m_nidayuda = x; // o ... ((struct ayuda *)( payuda2 + ( x * sizeof(ayuda) ) )))->m_nidayuda = x; } Después el c++ tiene una forma muy especial de tratar al ampersan (& o como se escriba) que explicada en palabras seria como 'obtener una referencia constante a una estructura' es mejor que un puntero porque no necesitas hacer casteos absurdos ni redundantes y evita hacer operaciones matemáticas con los punteros que es definitivamente un peligro andante,,, y un ejemplo seria una función: void callayuda(struct ayuda & miayuda) { miayuda.m_nidayuda = 8; } entonces los llamados a esta funcion: callayuda(stayuda); callayuda(*payuda); callayuda(payuda2[1]); Etcétera,,, espero haber respondido tu pregunta, pero si tienes más preguntas puntuales no dudes en hacerlas ^^ sin más atentamente. Charlyx.-