Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
4.1 kB
0
Indexable
Never
#include <stdio.h>
#include <stdlib.h> //para punteros, atoi, memoria dinamica...

typedef struct {
    int id;
    int edad;
} Persona;

typedef struct {
    int alumnos;
    Persona *personas;
} Clase;

void modifica(int *puntero, int recibido) {
    *puntero = recibido;
}

void modificarPersona(Persona *punteroPersona, int id, int edad) { //Para acceder a los contenidos de una estructura con PUNTERO se usa ->
    punteroPersona->id = id;
    punteroPersona->edad = edad;
    (*punteroPersona).id = 80; //otra forma de acceder a los contenidos de una estructura con PUNTERO
    (*punteroPersona).edad = edad; 
}

void modificarPersona2(Persona **punteroPersona, int id, int edad) { //Para acceder a los contenidos de una estructura con PUNTERO se usa ->
    (*punteroPersona)->id = id;
    (*punteroPersona)->edad = edad;
    (**punteroPersona).id = 80; //otra forma de acceder a los contenidos de una estructura con PUNTERO (doble puntero)
    (**punteroPersona).edad = edad;
}

void funcGente(Clase *punteroClase) { // [accediendo] tambien es una forma de dereferenciar! (acceder al contenido de un puntero) ( -> | (*). | [] )
    punteroClase->alumnos = 2;
    punteroClase->personas[0].id = 1;
    punteroClase->personas[0].edad = 20;
    punteroClase->personas[1].id = 2;
    punteroClase->personas[1].edad = 30;
    (*punteroClase).personas[1].edad = 700;
}

void funcGente2(Clase **punteroClase) {
    (*punteroClase)->alumnos = 2;
    (*punteroClase)->personas[0].id = 30;
    (*punteroClase)->personas[0].edad = 30;
    (*punteroClase)->personas[1].id = 600;
    (*punteroClase)->personas[1].edad = 600;
    (**punteroClase).personas[1].edad = 1000;

}

int main() {

    int patata = 6;
    int *puntero;
    Persona *punteroPersona = NULL; //que en una estructura el propio nombre ya es un puntero! si ponemos * tenemos doble puntero :)
    Clase *punteroClase = NULL;

    puntero = &patata;

    printf("Direccion de memoria de patata: %p\n", &patata);
    printf("Direccion de memoria de puntero: %p\n", &puntero);
    printf("Direccion de memoria de contenido de puntero: %p\n", &(*puntero));
    printf("Valor de patata: %d\n", patata);
    printf("Valor de puntero: %d\n", *puntero);
    printf("Valor de contenido de puntero: %d\n", *puntero);

    patata = 8;
    *puntero = 10;

    printf("Valor de patata: %d\n", patata);
    printf("Valor de puntero: %d\n", *puntero);
    printf("Valor de contenido de puntero: %d\n", *puntero);

    modifica(&patata, 500);
    printf("Valor de patata: %d\n", patata);
    modifica(puntero, 1000);
    printf("Valor de patata: %d\n", patata);

    punteroPersona = (Persona *) malloc(sizeof(Persona)*1);
    modificarPersona(punteroPersona, 1, 20);
    printf("Valor de id: %d\n", punteroPersona->id);
    printf("Valor de edad: %d\n", (*punteroPersona).edad);

    modificarPersona2(&punteroPersona, 99, 2000);
    printf("Valor de id: %d\n", punteroPersona->id);
    printf("Valor de edad: %d\n", (*punteroPersona).edad);





    punteroClase = (Clase *) malloc(sizeof(Clase)*1);
    (*punteroClase).personas = (Persona *) malloc(sizeof(Persona)*2);
    punteroClase->personas = (Persona *) malloc(sizeof(Persona)*2);

    funcGente(punteroClase);
    printf("Valor de alumnos: %d", punteroClase->alumnos);
    printf("Valor de id: %d", punteroClase->personas[0].id);
    printf("Valor de edad: %d", punteroClase->personas[0].edad);
    printf("Valor de id: %d", punteroClase->personas[1].id);
    printf("Valor de edad: %d\n", punteroClase->personas[1].edad);

    

    funcGente2(&punteroClase);
    printf("Valor de alumnos: %d", punteroClase->alumnos);
    printf("Valor de id: %d", punteroClase->personas[0].id);
    printf("Valor de edad: %d", punteroClase->personas[0].edad);
    printf("Valor de id: %d", punteroClase->personas[1].id);
    printf("Valor de edad: %d", punteroClase->personas[1].edad);

    free(punteroClase->personas); //SIEMPRE!
    free(punteroPersona);

    punteroClase->personas = NULL; //SIEMPRE!
    punteroPersona = NULL; //SIEMPRE!




    return 0;
}