Untitled
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; }