Академический Документы
Профессиональный Документы
Культура Документы
Semana 14:
Memoria Dinmica 2
Noviembre de 2015
1
Agenda
Vector de apuntadores
Matrices dinmicas
Apuntador a Apuntador
#define TAM 10
int v[TAM];
3
Vector de Apuntadores
En este caso, los elementos del array son del tipo apuntador.
Ejemplo 1
int* vect[10];
int i=1;
vect[5]= &i; // la componente vect[ k ] es un apuntador
*vect[5] = 2; // tambin la variable i valdr 2.
Vector de Apuntadores
Ejemplo 2
char* colores[4] = {"Gris", "Azul", "Rojo", "Verde"};
// Array bidimensional (4 apuntadores a carcter)
*colores[2] = "Anaranjado";
float* a[10];
float x=10.5f;
a[6] = &x;
*a[6] = 0; // cunto vale x?
7
float mat[4][3];
10
Matrices Dinmicas
Reserva esttica del array:
13
14
Apuntador a Apuntador
Una variable apuntador est reservada en la
memoria del computador como cualquier otra
variable.
Apuntador a Apuntador
Ejemplo:
int main(){
int a=5, *b, **c;
b = &a;
c = &b;
printf("%d\n", a);
printf("%d\n", *b);
printf("%d\n", *(*c));
}
16
Apuntador a Apuntador
Explicacin:
17
Apuntador a Apuntador
De lo que vimos en la sesin anterior, sabemos
que un apuntador puede ser usado para
referenciar a un vector reservado dinmicamente.
int *p;
p = calloc(5, sizeof(int));
18
Apuntador a Apuntador
Lo mismo sucede con un apuntador a apuntador,
slo que en este caso el vector reservado es de
apuntadores.
int **p;
p = calloc(5, sizeof(int *));.
Observe que cada posicin del vector anterior es del tipo int *, 19
es decir, un apuntador a entero!
Matrices Dinmicas
Matriz representada por un vector de apuntadores:
20
int **p;
int i;
p = calloc(5, sizeof(int *));
for(i=0; i<5; i++)
p[i] = calloc(3, sizeof(int));
22
Matrices Dinmicas
/* Solucin 1: reserva de matriz como vector simple */
float *transpuesta (int m, int n, float* mat)
{
int i, j;
float* trp;
/* reserva la matriz transpuesta con n filas y m columnas */
trp = (float*) malloc(n*m*sizeof(float));
/* rellena la matriz */
for (i=0; i<m; i++)
for (j=0; j<n; j++)
trp[ j*m+i ] = mat[ i*n+j ];
return trp;
}
25
Matrices Dinmicas
/* Solucin 2: reserva de matriz como vector de apuntadores */
float** transpuesta (int m, int n, float** mat)
{
int i, j;
float** trp;
/* reserva matriz transpuesta con n filas y m columnas */
trp = (float**) malloc(n*sizeof(float*));
for (i=0; i<n; i++)
trp[i] = (float*) malloc(m*sizeof(float));
/* rellena matriz */
for (i=0; i<m; i++)
for (j=0; j<n; j++)
trp[ j ] [ i ] = mat[ i ][ j ];
return trp;
26
}