Modificar una estructura dentro de una funcion
Tengo una estructura de la cual obtengo los datos en el programa principal. Los datos de esta estructura tengo que grabarlos/modificarlos dentro de una funcion.
El caso es que no tengo ni la más remota idea de como solucionar esto... Sé que debo utilizar punteros pero no sé dónde (definirlo en la función, enviarlo a través del programa principal...??).
El caso es que no tengo ni la más remota idea de como solucionar esto... Sé que debo utilizar punteros pero no sé dónde (definirlo en la función, enviarlo a través del programa principal...??).
Lo que tenes que hacer es pasarle el puntero a la estructura a la funcion que la va a alterar.
el prototipo quedaria (genericamente) asi:
struct tipo_struct
{
int data;
char id... etc, etc, etc.
}
void funcion (struct tipo_struct * ptr)
{
// La referencia a los componentes de la estructura cuando
// es un puntero se hace con -> o con (*estructura).miembro
// pero prefiero la primera por su claridad,
ptr->data =
if (ptr->id ...) etc, etc, etc.
}
Y en la funcion llamante pasarle los parametros asi:
...
struct tipo_struct datos;
...trabajar con datos...
funcion(&datos); // Paamos el puntero a la estructura
... etc, etc, etc...
Epero que no este muy confuo 0:-) y suerte.
el prototipo quedaria (genericamente) asi:
struct tipo_struct
{
int data;
char id... etc, etc, etc.
}
void funcion (struct tipo_struct * ptr)
{
// La referencia a los componentes de la estructura cuando
// es un puntero se hace con -> o con (*estructura).miembro
// pero prefiero la primera por su claridad,
ptr->data =
if (ptr->id ...) etc, etc, etc.
}
Y en la funcion llamante pasarle los parametros asi:
...
struct tipo_struct datos;
...trabajar con datos...
funcion(&datos); // Paamos el puntero a la estructura
... etc, etc, etc...
Epero que no este muy confuo 0:-) y suerte.
debes pasar a la funcion como parámetro un puntero a la estructura que quieres acceder. Por ejemplo:
si tu estructura se llama struct_a:
int main()
{
struct struct_a nombre_que_le_das;
...
int funcion(&nombre_que_le_das);
...
}
al definir la funcion tienes que hacerlo así:
int funcion(struct struct_a *nombre_dentro_de_la_funcion)
{
....
/* para acceder a los campos*/
nombre_dentro_de_la_funcion->nombre_de_campo_a=...lo que sea....
....
}
Espero haberte aclarado algo, de todas formas mirando cualquier manual seguro que te aclaras rapido y entiendes lo que realmente es un puntero y porque se hace todo esto así.
Un puntero es: la direccion de memoria donde esta colocado aquello a lo que apunta. Por ejemplo en nuestro caso. La estructura es un conjunto de datos (varios enteros, strings, caracteres,.. cualquier variable.....vamos, lo que sea) mientras el puntero es la direccion de memoria a partir de la cual estos datos estan almacenados. Solo una direccion (un numero de 4 bytes).
los operadores:
& --> designa la direccion de un dato.(combierte dato a puntero)
* --> en una declaracion: dice que lo que declaras es un puntero.
--> en el programa: dice que accedes al dato apuntado por una variable declarada como puntero. (combierte puntero a dato)
structura.campo --> para acceder a un campo de una estructura no declarada como puntero.
structura->campo --> para acceder a un campo de una estructura declarada como tal. sin *.
Bueno valla lio ¿no?
espero haberte ayudado un poquito. si no entiendes algo me mandas un emilio. chao
si tu estructura se llama struct_a:
int main()
{
struct struct_a nombre_que_le_das;
...
int funcion(&nombre_que_le_das);
...
}
al definir la funcion tienes que hacerlo así:
int funcion(struct struct_a *nombre_dentro_de_la_funcion)
{
....
/* para acceder a los campos*/
nombre_dentro_de_la_funcion->nombre_de_campo_a=...lo que sea....
....
}
Espero haberte aclarado algo, de todas formas mirando cualquier manual seguro que te aclaras rapido y entiendes lo que realmente es un puntero y porque se hace todo esto así.
Un puntero es: la direccion de memoria donde esta colocado aquello a lo que apunta. Por ejemplo en nuestro caso. La estructura es un conjunto de datos (varios enteros, strings, caracteres,.. cualquier variable.....vamos, lo que sea) mientras el puntero es la direccion de memoria a partir de la cual estos datos estan almacenados. Solo una direccion (un numero de 4 bytes).
los operadores:
& --> designa la direccion de un dato.(combierte dato a puntero)
* --> en una declaracion: dice que lo que declaras es un puntero.
--> en el programa: dice que accedes al dato apuntado por una variable declarada como puntero. (combierte puntero a dato)
structura.campo --> para acceder a un campo de una estructura no declarada como puntero.
structura->campo --> para acceder a un campo de una estructura declarada como tal. sin *.
Bueno valla lio ¿no?
espero haberte ayudado un poquito. si no entiendes algo me mandas un emilio. chao
