C/Visual C - estructuras - punteros

 
Vista:

estructuras - punteros

Publicado por Franco (2 intervenciones) el 17/04/2006 21:47:49
Estamos estudiando estructuras y no sabemos bien la utilizacion de:
1º punteros a estructuras EJ:
struct alumno {
char nombre[10];
char telefono[10];
} *alumno_ptr;

para q se utiliza el puntero alumno_ptr ?

2º miembros de estructuras como punteros EJ:

strcut alumno {
int *edad;
char *word;
}alumnos_escuela;

no entendemos la utilizacion de *edad y *word y la diferecian si se ubiesen definido como no punteros.

3º se puede mandar una estructura completa como argumento de una funcion, sin tener q mandar los miembros por separado?

Gracias por sus prontas respuestas (si las hay).
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:estructuras - punteros

Publicado por fernando.gomez (1603 intervenciones) el 18/04/2006 01:17:15
Un puntero se emplea para almacenar datos en memoria dinámica:

alumno_ptr = malloc(sizeof(struct alumno));
alumno_ptr->edad = 15;
free(alumno_ptr);

o bien, para hacer referencia a alguna otra variable. Típicamente, se emplean para pasar argumentos como parámetro de alguna función que queremos modificar dentro de la misma.

void foo(struct alumno* p)
{
p->edad = 15;
}

int main()
{
struct alumno a;
a.edad = 10;
printf("Edad antes: %d", a.edad);

foo(&a);
printf("Edad después: %d", a.edad);

return 0;
}

El código anterior imprime 10 y luego 15.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructuras - punteros

Publicado por marcos (2 intervenciones) el 18/04/2006 15:34:31
2.- int *edad no se para que, y char *word creo que seria algo como una cadena de tamaño indefinido...

3.- En eso podrias utilizar los punteros... pasas como parametro el puntero...

- Hice lo que pude.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructuras - punteros

Publicado por Alex (2 intervenciones) el 22/04/2006 20:10:51
Respecto a la respuesta anterior y como nota adicional...

La utilizacion de punteros tiene varias ventajas, que obviamente depende de tus objetivos el aprovecharlas.
Te permite asignación dinámica de memoria, lo que implica que por ejemplo podrías utilizar listas enlazadas de tipo que quieras.
Algo concreto... Listas de enteros, entonces podrías manejar enteros tan largos como memoria tengas (Idealmente, otra cosa sería las operaciones que hagas luego sobre el tipo de datos). Más interesante sería usar listas de tipos de datos definidos por tí, por ejemplo por medio de un struct lo que a su vez sería (o podría) un nuevo tipo de datos.

Adicionalmente la utilizacion de punteros te permite hacer funciones que devuelvan un tipo de datos no primitivo, o sea un tipo de datos definidos por el usuario. De forma predetermindada la mayoría de lenguajes no permiten retornar un tipo de datos definido por un usuario como resultado de una funcion (otros sí).
Entonces defines tu propio tipo de datos como un puntero a "algo". Tu funcion pasa así a retornar un puntero que es un tipo de dados primitivo. De esta forma podrías tener algo así como...

typedef struct { ......} *tdatos;

//disculpad los errores de sintaxis hace mucho tiempo que no escribo en C.

luego tu funcion podría tener el siguiente prototipo...

tdatos nombreFuncion (TipoA, TipoB, &TipoC);

nombreFuncion toma 2 argumentos por valor y uno por referencia y devuelve un elemento de tipo tdatos.

Los punteros son un tema sumamente extenso para mayor informacion os recomiendo que consulteis bibliografía adecuada. Sobre C existen muchos libros que tratan estos temas y a nivel introductorio podeís consultar el de los autores Deitel & Deitel.
Un saludo, espero que os sirva y ánimo, C es un hermoso lenguage de programación!
Alex.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar