I think what you mean is:
int ptr[80]; this allocates 80 ints
instead of:
int *ptr[80]; which allocates 80 pointers to ints
int *ptr = new int[80]; allocates a pointer to 80 ints
But anyway, using new and delete you can dynamically allocate memory which HAS to be freed with delete. You cant do that with int ptr[80].
Why would you do one over the other?
if the length of the array is fixed and known at compile time then:
int ptr[80];
If it is not known then use new and delete:
int a;
cout<<"enter length";
cin>>a;
int *ptr = new int[a]; <------------ a could be any number
Another advantage is where the variable is stored.
int ptr[80]; is on the stack which is somewhat limited. When the stack is no longer needed the whole stack is freed automatically.
int *ptr = new int[80]; is stored in RAM which is allocated from the free memory pool, which is why you must delete when you are done with it. Using delete frees the memory and returns it back to the memory pool.
Basically using new is the same as using malloc, and delete is the same as using free.