lo que hace el operador new, es decirle al sistema operativo que reserve memoria de
X tamaño para ser usada por tu programa, el SO va a evaluar si esta disponible esa cantidad de memoria y si es asi, la va a reservar para el programa y le va a decir a este la posicion de memoria que se reservo para el.... es mas o menos asi, nunca me lei la teoria :)
ahora, si haces esto:
Código C++:
Ver originalstruct agenda
{
char nombre[25];
char apellido[25];
int edad;
int dni;
};
...
//dentro de alguna funcion o de main
agenda *nueva_agenda; //declaramos un puntero a agenda
nueva_agenda= new agenda(); //le asignamos al puntero una direccion de memoria
...
//tambien se puede hacer en una sola linea
agenda *nueva_agenda= new agenda();
en el codigo anterior, el programa, le solicita al SO que le reserve memoria del tamaño del struct, si se pudo hacer, el SO operativo le devolvera esta direccion de memoria al programa, y este ultimo se la asignara al puntero
nueva_agenda. Con este puntero vas a poder manipular la direccion de memoria que se te asigno y cuando ya no la necesites mas haces
free nueva_agenda;, para liberar la memoria y asi el sistema operativo la pueda usar nuevamente.
entonces, podriamos hacer lo siguiente:
Código C++:
Ver original#include <iostream>
#include <cstring>
using namespace std;
struct agenda
{
char nombre[25];
char apellido[25];
int edad;
int dni;
};
int main(int argc, char *argv[]) {
agenda *nueva_agenda= new agenda();
nueva_agenda->edad= 10;
nueva_agenda->dni= 43000758;
strcpy(nueva_agenda
->nombre
, "eutanacio"); strcpy(nueva_agenda
->apellido
, "dritz");
cout<< "el nombre es: "<< nueva_agenda->nombre;
cout<<endl<< "el apellido es: "<< nueva_agenda->apellido;
cout<<endl<< "la edad es: "<<nueva_agenda->edad;
cout<<endl<< "el dni es: "<<nueva_agenda->dni;
free nueva_agenda
; //liberamos la memoria utilizada por el puntero
return 0;
}
tambien se utilizan para el ejemplo que te dio cesar y muchos mas, todo depende de la necesidad del programa
saludos