-
Notifications
You must be signed in to change notification settings - Fork 1
Arreglos de apuntadores
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
int main(){
srand(time(NULL));
int cols,rows;
int **ptr=NULL;
cout << "Ingresa filas";
cin >> rows;
cout << "Ingresa columnas";
cin >> cols;
try{
ptr = new int*[rows];
for(int i = 0; i < rows; i++)
*(ptr+i) = new int[cols];
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
*(*(ptr + i)+j) = rand() % (rows*cols);
}
}
for(int i = 0; i < rows; i++){
cout << "\n|" << setw(2);
for(int j = 0; j < cols; j++)
cout << setw(2) << ptr[i][j] << setw(2) << "|";
}
for(int i = 0; i < rows; i++)
delete[] *(ptr+i);
cout << "\nMemoria de columnas liberada\n";
delete[] ptr;
cout << "Memoria completa liberada";
}catch(bad_alloc& ex){
cout<< "Matriz no creada, memoria insuficiente\n";
}
cout <<endl;
return 0;
}
Para declarar matrices, el tema cambia bastante, ya que en realidad se crea un arreglo de apuntadores a un tipo de dato, para el ejemplo sería un arreglo de apuntadores a enteros.
Para decirle al compilador que vamos a crear una matriz usando arreglos usamos **
int **ptr=NULL;
Y creamos el arreglo de apuntadores indicando que se trata de apuntadores
ptr = new int*[rows];
Para crear las columnas hay que recorrer cada fila.
for(int i = 0; i < rows; i++)
*(ptr+i) = new int[cols];
También podemos usar la notación arreglo
for(int i = 0; i < rows; i++)
ptr[i] = new int[cols];
Para inicializarlos podemos usar tanto la notación apuntador o la notación arreglo
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
*(*(ptr + i)+j) = rand() % (rows*cols);
Dado que lo que queremos modificar es una variable entera, asi que hay que recorrer los apuntadores a enteros que se encuentran en el arreglo y de ahí recorrer los apuntadores a enteros.
Lo podemos ver así
*(*(arreglo de apuntadores)apuntadores a enteros)
Es una librería de manipulación de parámetros de salida
Esta librería nos permite usar setw
, que lo que hace es crear un espacio del tamaño que le indiquemos en cada declaración.
for(int i = 0; i < rows; i++){
cout << "\n|" << setw(2);
for(int j = 0; j < cols; j++)
cout << setw(2) << ptr[i][j] << setw(2) << "|";
}
Lo que hace aquí es asignar un espacio de tamaño 2, como si presionaramos 2 veces la barra espaciadora, por eso no confundir con \t
que es para tabulación.
Para una matriz de 4x5 la salida se vería así
| 1 |13 |18 | 6 |17 |
|15 |17 |16 | 9 | 8 |
| 3 | 1 |18 | 7 |14 |
|12 |19 |15 |16 | 6 |
Esto de modificar los parámetros de salida, solo dependerá de si queremos darle estilo a la salida, no es algo obligatorio
Introducción | Apuntadores | Arreglos y apuntadores | Apuntadores a funciones |
---|