// 7.cpp
#include <iostream>
using namespace std;
/* Imprime un arreglo; donde 'kind' es 'stack' o 'heap' */
void print_arr(const string kind, const int* a, const int n) {
/* Se chequea la validez del puntero al arreglo */
if (!a) {
cout<<"Arreglo "<<kind<<":\tEl puntero al arreglo es NULL."<<endl;
return;
}
int i = 0;
cout<<"Arreglo "<<kind<<":\t";
for (i=0; i<n-1; i++)
cout<<a[i]<<", ";
cout<<a[i]<<endl; /* imprime el último item */
}
int main() {
/* Declarando variables */
int stack_arr[5] = {}; /* inicializado a 0 */
int* heap_arr = NULL; /* apuntando a NULL; valores no asignados */
print_arr("Stack", stack_arr, 5);
print_arr("Heap", heap_arr, 5);
/* 1. Asignar dinámicamente 5 enteros del heap para heap_arr */
heap_arr = new int[5];
/* y seteándolo a 0 */
for (int i=0; i<5; i++)
heap_arr[i] = 0;
print_arr("Heap", heap_arr, 5);
/* 2. Para cada arreglo (stack_arr, heap_arr): */
/* a) Setear el item en el indice 2 a 42 */
stack_arr[2] = 42;
print_arr("Stack", stack_arr, 5);
heap_arr[2] = 42;
print_arr("Heap", heap_arr, 5);
/* b) Imprimir el item en el indice 2 */
cout<<"Stack:\t"<<stack_arr[2]<<endl;
cout<<"Heap:\t" <<heap_arr[2] <<endl;
/* c) Incrementar el item en el indice 2 */
stack_arr[2]++;
// stack_arr[2] += 1; /* esta versión también trabaja */
print_arr("Stack", stack_arr, 5);
heap_arr[2]++;
// heap_arr[2] += 1; /* esta versión también trabaja */
print_arr("Heap", heap_arr, 5);
/* d) Imprimir las direcciones del primer item */
cout<<"El arreglo en el Stack se inicia en:\t"<<stack_arr<<endl;
cout<<"El arreglo en el Stack se inicia en:\t"<<&(stack_arr[0])<<endl;
cout<<"El arreglo en el Heap se inicia en:\t"<<heap_arr <<endl;
cout<<"El arreglo en el Heap se inicia en:\t"<<&(heap_arr[0])<<endl;
/* 3. Liberar la memoria asignada a heap_arr */
delete [] heap_arr;
return 0;
}