/* en este programa se contrasta la creacion estatica de una global y la creacion dinamica. La estatica es memoria asignada desde que el programa entra en ejecucion. la dinamica se va solicitando durante la ejecucion, a medida que se requiere. Se puede liberar usando la funcion free() */ #include #include struct str { int x; struct str *p; }; main(){ // se crea la variable estructurada llamada "a" que tiene memoria asignada, // la relacion entre el nombre "a" y la memoria asignada es permanente: struct str a; // se crea la variable de tipo puntero "b" para apuntar a variables estructuradas, // no hay memoria asignada de tipo estructurada, "b" apunta a cualquier direccion // se fuerza a que apunte NUll para asegurar que es a un "nada" conocido: struct str *b=NULL; // a la variable "a" se puede modificar u obtener el contenido de sus capos, // se debe usar "." para distinguir los campos: a.x=55; // se pide memoria al sistema operativo para una variable estructurada en forma dinamica, // la variable puntero "b" queda apuntando a la nueva variable estructurada: b=(struct str *)malloc(sizeof(struct str)); // para acceder a los campos de la variable estructurada se debe usar "->". b->x=66; printf("%d\n",b->x); // si la variable de tipo puntero se hace apuntar a otra variable estructurada // por ejemplo a "a", la variable estructurada, pedida en forma dinamica, ha quedado // sin la posibilidad de ser usada por el programa. para evitar memoria sin apuntar, // se debe liberar primero mediante free(). free(b); b=&a; }