Autor
|
Tema: Array de estructura (struct) typedef y punteros[C]. (Leído 11,630 veces)
|
_Enko
|
Pues sigo pensando que diseñar todo pasando por parametro un puntero a un arreglo de 10 estructuras no es necesario. Al menos que vayas a tener mas de un arreglo de esos? Pero el arreglo es uno solo. Entonces para que pasarlo como parametro? Y si aun pasas ese arreglo como parametro por referencia, pues no pasas el indice del arreglo, entonces que se modifica? Primer elemento, segundo? todos? typedef struct contacto{ int orden, celular; char nombre[30], apellido[30], calle[30], ciudad[30], correo[50]; }; void ingresar_datos_(contacto* cntcto) { cntcto->orden = 5; } int main(int argc, char *argv[]) { contacto miagenda[10]; ingresar_datos_(&miagenda[3]); miagenda[3].orden == 5;
Saludos.
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Eferion, me parece muy interesante lo de puntero doble, etc. Yo creí que sabía bastante sobre punteros pero veo que tengo que repasarlos, si estaríamos sentados los dos frente a la misma compu te efectuaría una pregunta, pero no es este el caso, seguramente consultando en la web voy a obtener la respuesta a mi duda. Siempre puedes probar suerte, lo mismo alguno de nosotros es capaz de resolverte la duda. Por otro lado, me parece estupenda la iniciativa de buscar la solución por tu cuenta. Valerse por uno mismo es ley de vida en este mundo, sobretodo porque cuando alcanzas cierto nivel te das cuenta de que hay muy poquitos recursos a tu alcance que merezcan realmente la pena... y si te atascas al final dependes únicamente de ti mismo para salir del agujero.
|
|
|
En línea
|
|
|
|
DanielPy
Desconectado
Mensajes: 145
|
Hola a todos. Espero que no me odien por tanta molestias, pero prefiero que me envíen algún mal pensamiento antes que quedarme con alguna duda.- Este programa es para que me digan con teoría que le estoy pasando a la función.- #include <stdio.h> typedef struct{ int orden, celular; char nombre[30], apellido[30], calle[30], ciudad[30], correo[50]; }agenda[10]; void ingreso(agenda *ptrContactos); int main(void){ agenda contactos; ingreso(&contactos); return 0; } void ingreso(agenda *ptrContactos){ int bucle = 0, cont = 1; do{ (*(*ptrContactos + cont)).orden = cont; printf("\n\n orden.....................: = %d", (*(*ptrContactos + cont )). orden); cont++; }while(bucle >= 0 && cont <= 10); }
Este es para que vean que no pretendo que me den todo hecho, me desconecté de internet, cerré la ventana con el manual y lo logré sin ayuda, no es gran cosa pero me da cierta seguridad.- #include <stdio.h> typedef struct{ int dia, mes, año; }_fecha; void funcPuntero(_fecha *ptr); int main(void){ _fecha fecha, *ptrFecha; fecha.dia = 10; fecha.mes = 2; fecha.año = 2015; printf("\n hoy es......: %d/%d/%d", fecha. dia, fecha. mes, fecha. año ); ptrFecha = &fecha; ptrFecha->dia = 11; ptrFecha->mes = 3; ptrFecha->año = 2016; printf("\n otra fecha..: %d/%d/%d", ptrFecha ->dia , ptrFecha ->mes , ptrFecha ->año ); funcPuntero(&fecha); printf("\n hoy es......: %d/%d/%d", ptrFecha ->dia , ptrFecha ->mes , ptrFecha ->año ); return 0; } void funcPuntero(_fecha *ptr){ ptr->dia = 10; ptr->mes = 2; ptr->año = 2015; }
Bueno, en definitiva todo tiene que ver con el primer programa es decir modificar los 7 campos del registro en la función ingreso pasándole un puntero a la estructura agenda pero no copiando todo el array a la función sino tan sólo un puntero al primer elemento.- Gente mil disculpas si ya me dieron la solución a esto pero estoy tan embotado que tal vez no me dí cuenta.- Saludos. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Este programa es para que me digan con teoría que le estoy pasando a la función. Demasiado complicado para lo que intentas. Basta con declarar la funcion con dos parámetros: el primero es la dirección en memoria del array y el segundo su numero de elementos. De esta forma: #include <stdio.h> struct registro { int ordenint; int celular; char nombre[30]; char apellido[30]; char calle[30]; char ciudad[30]; char correo[50]; }; void ingreso(struct registro *reg, size_t num_regs); int main(void) { struct registro reg[10]; ingreso(reg, sizeof reg / sizeof reg[0]); return 0; } void ingreso(struct registro *reg, size_t num_regs) { size_t i; for (i = 0; i < num_regs; i++){ /* Aqui procesas el elemento reg[i] */ } }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
DanielPy
Desconectado
Mensajes: 145
|
Hola rir3760. Me queda una duda, el array reg cuando está dentro de la función ingreso ¿no es un puntero al primer elemento del arreglo? y si es así ¿porque no puedo utilizar el operador flecha (->)? y si me acepta el operador punto (.).- #include <stdio.h> typedef struct{ int orden; int celular; char nombre[30]; char apellido[30]; char calle[30]; char ciudad[30]; char correo[50]; }registro; void ingreso(registro *reg, size_t num_regs); int main(void){ registro reg[10]; ingreso(reg, sizeof reg / sizeof reg[0]); return 0; } void ingreso(registro *reg, size_t num_regs){ size_t i; for (i = 0; i < num_regs; i++){ reg[i].orden = i; printf("\n orden = %d", reg [i ]. orden); } }
Saludos. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Me queda una duda, el array reg cuando está dentro de la función ingreso ¿no es un puntero al primer elemento del arreglo? Correcto. y si es así ¿porque no puedo utilizar el operador flecha (->)? y si me acepta el operador punto (.). Primero, no hay relación entre los operadores ya que "->" aplica a un puntero mientras que "." aplica a un objeto. Segundo, en tu caso: void ingreso(registro *reg, size_t num_regs) { /* ... */ reg[i].orden = i;
Tienes el puntero reg y para acceder al objeto apuntado debes aplicar indireccion con "[]" y solo entonces se accede al campo indicado con ".". Puedes utilizar el operador "->" sin ningún problema: void ingreso(registro *reg, size_t num_regs) { /* ... */ (reg + i)->orden = i;
Pero me temo estoy repitiendo la explicación (en la primera pagina de este tema) de Blaster, por favor relee el tema con atención. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
DanielPy
Desconectado
Mensajes: 145
|
Hola rir3760. ……de Blaster, por favor relee el tema con atención.
Tienes toda la razón, en definitiva se hizo un poco largo, pero realmente he aprendido mucho pero mucho con esto.- Muchas gracias a todos por el tiempo [Solucionado].- Saludos. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
normaaaaaaaa
Desconectado
Mensajes: 3
|
Hola yo tengo una duda tengo este pedazo de codigo: # include <iostream> # include <stdio.h> # include <stdlib.h> # include <cstring> # include <Mascota.h> # include <Cacatuas.h> using std::string; using namespace std; int totalMascotas=0; int main() { int numMas, a,resp; Mascota *cacatuas=new Cacatuas; cout <<"¿Cuantas mascotas tiene?"<<endl; cin>>numMas; for (a=0;a<numMas;a++){ cacatuas->pedirDatos();} for (a=0;a<numMas;a++){ cout <<"Los datos de la cacatua son:"; cout<<((Cacatuas *)cacatua)->getespecieCacatua()<<endl; } return 0; }
Mi problemas esta que cuando mando a imprimir mi apuntador solo me imprime los ultimos valores que introduje en la ultima vuelta del ciclo y queria saber como puedo o si hay alguna forma de que mi apuntador pueda almacenar varios valores Porfa ayuda!!!! es urgente [MOD] No está permitido publicar un post por duplicado, el otro te ha sido borrado.
Usa las etiquetas GeShi para publicar codigo.
Mejor sería abrir un tema nuevo para tu problema.
|
|
« Última modificación: 14 Junio 2015, 03:27 am por simorg »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
quien me puede ayudar a pasar este codigo con punteros y memoria dinamica
Programación C/C++
|
attackers
|
3
|
2,483
|
23 Noviembre 2011, 13:04 pm
por attackers
|
|
|
[Ayuda-C] Vectores y punteros (inicialización dinámica)
Programación C/C++
|
Miky Gonzalez
|
4
|
2,148
|
12 Noviembre 2014, 21:32 pm
por Miky Gonzalez
|
|
|
Punteros y memoria dinamica
Programación C/C++
|
bemone
|
4
|
2,292
|
30 Agosto 2015, 03:13 am
por geeke
|
|
|
definir los argumentos de una función de manera dinamica
Programación C/C++
|
fafafa01
|
2
|
2,426
|
2 Julio 2016, 10:22 am
por MAFUS
|
|
|
Escribir en una parte específica de un fichero o documento, de manera dinámica
PHP
|
big_ed
|
0
|
1,448
|
25 Abril 2019, 18:26 pm
por big_ed
|
|