Cita de: plataplomo2948 en 8 Noviembre 2014, 20:57 PM
Ok, veo porque usa un puntero doble. Quiere hacer un int array dentro de un struct. Debe hacer asi:Código [Seleccionar]
typedef struct Humano
{
int* Trabajos;
} HUMANO, *PHUMANO;
int main ()
{
// eso coresponde al tomano de su array
int NumeroDeElementos = 30;
PHUMANO Primera = (PHUMANO)malloc(sizeof(HUMANO));
Primera->Trabajos = (int*)malloc(sizeof(int) * NumeroDeElementos);
// nunca debe hacer eso por que es allocacion dinamica y eso es un valor estatico pero
// solo es pra mostrar como funciona
Primera->Trabajos[15] = 248;
printf("Primera->Trabajos = %i\n", Primera->Trabajos[15]);
free((int*)Primera->Trabajos);
free(Primera);
return 0;
}
modificaion - se me olvido poner un *
Primero muchas gracias por darte el tiempo de sacarme esta duda hermano, en verdad te lo agradezco.
1-Porque el vector de tipo persona es dinámico y contiene otro vector dinámico en su interior.
2- Pero cada persona será representada por la casilla del vector, y esa casilla/persona tiene asignadas muchas tareas (que en este caso es 4 por ej), según el programa y los for que tengo, puedo moverme por las tareas pero no por las personas (pues no puedo agregar un contador "i" a la persona para irla recorriendo (la idea es no agregar variables al struct y usar lo que está).
Este ejemplo de 32 es sumamente improvisado, es sólo para tener la idea, pero ud que cambiaría para que el programa pueda imprimir del 1 al 32 y que no imprima el 29,30,31 y 32 ocho veces?
Así como ejemplo mi programa está así:
Código (c) [Seleccionar]
#include <stdio.h>
typedef struct humano{
int *trabajos;
}persona;
int main(){
int i,j,cont=1;
int cantidad_personas=8;
int cantidad_trabajos=4;
persona *primera;
primera=(persona *)malloc(sizeof(persona)*cantidad_personas);
primera->trabajos=(int *)malloc(sizeof(int)*cantidad_trabajos);
for (i = 0; i < cantidad_personas; i++){
for (j = 0; j < cantidad_trabajos; j++){
primera->trabajos[j]=cont;
cont++;
}
}
for (i = 0; i < cantidad_personas; i++){
for (j = 0; j < cantidad_trabajos; j++){
printf("%d ",primera->trabajos[j]);
}
printf("\n");
}
return 0;
}
Y en un mundo ideal, lo que yo quiero es que avance por las personas y los trabajos así (aclaro este no compila pero si compilara haría lo que yo quiero(bajo una logica algoritmica)):
Código (c) [Seleccionar]
#include <stdio.h>
typedef struct humano{
int *trabajos;
}persona;
int main(){
int i,j,cont=1;
int cantidad_personas=8;
int cantidad_trabajos=4;
persona *primera;
primera=(persona *)malloc(sizeof(persona)*cantidad_personas);
primera->trabajos=(int *)malloc(sizeof(int)*cantidad_trabajos);
for (i = 0; i < cantidad_personas; i++){
for (j = 0; j < cantidad_trabajos; j++){
primera[i]->trabajos[j]=cont;
cont++;
}
}
for (i = 0; i < cantidad_personas; i++){
for (j = 0; j < cantidad_trabajos; j++){
printf("%d ",primera[i]->trabajos[j]);
}
printf("\n");
}
return 0;
}
Ud cómo le haría/modificaría tomando en cuenta el mismo ejemplo que le muestro?