Discussion:
(int*)[5]
(demasiado antiguo para responder)
Olaf "El Blanco"
2006-02-15 08:08:24 UTC
Permalink
Disculpen por lo básico, el subject que es?
¿Una matriz en la que la cantidad de columnas esta predefinido?
¿Un vector de 5 * X enteros?
Un ejemplito me vendría muy bien.

Muchísimas Gracias.
heltena
2006-02-15 08:51:53 UTC
Permalink
es un vector de cinco punteros a enteros. Si cada puntero ocupa cuatro
bytes (32 bits), este tipo ocupa 5 * 4 = 20 bytes. Pero no tienes
enteros por ninguna parte.

El tipo (int *)[5] ocupa lo mismo que (doube *)[5], porque un puntero,
es un puntero.

Puedes crearte una matriz si a cada puntero le asignas una posición de
memoria que contiene enteros (bueno, contiene, son solo bytes, pero que
sepas que alli hay enteros). Por ejemplo:

int *pseudomatriz[5];
for (i = 0; i < 5; i++) /* mi teclado no tiene el menor que, lo
siento */
{
pseudomatriz[i] = (int *) malloc( sizeof(int) * 5);
}

Pero ojo, que también puedes tener otras estructuras que no sean
matrices (por ejemplo, el triángulo inferior a la diagonal de una
matriz de 6x6):

int *triangulo[5];
for (i = 0; i < 5; i++)
{
triangulo[i]= (int *) malloc( sizeof(int) * (i + 1) );
}

Y ya para acabar, recuerda de liberar la memoria cuando acabes de
usarla (free).

Hasta pronto!!
Olaf "El Blanco"
2006-02-15 09:54:55 UTC
Permalink
int *pseudomatriz[5];
for (i = 0; i < 5; i++)
{
pseudomatriz[i] = (int *) malloc( sizeof(int) * 5);
}

En la linea del malloc, has multiplicado por 5, pero supongo que no tiene
nada que ver con el anterior 5 verdad?
Podrias haber echo: pseudomatriz[i] = (int *) malloc( sizeof(int) * 100);
??? O sea: 5 filas y 100 columnas?

Saludos.
heltena
2006-02-16 07:44:02 UTC
Permalink
Si, claro, no me he dado cuenta que una matriz cuadrada no es el mejor
ejemplo.

Vaya bien!
Antoine Leca
2006-02-16 16:30:15 UTC
Permalink
Post by Olaf "El Blanco"
Disculpen por lo básico, el subject que es?
En C, nada. No es sintaxis correcta.


Tienes dos posibilidades semejantes pero distinctas:

int*[5] - descripción de un tipo abstracto.
Solo se puede encontrar en prototipos. El parametro correspondiente, como en
f(int*p[5]) {...}, tiene que ser una tabla de punteros hacia enteros (o un
doble puntero). La sintaxis da la idea que está tabla tiene 5 elementos,
pero no es necesario; incluso puede tener solo uno, o sea, ser un doble
puntero; también puede tener más de 5 elementos.
int(*[5]) es lo mismo, y se usa en f( int(*p[5]) ).

int(*)[5] - descripción de un tipo abstracto.
Solo se puede encontrar en prototipos. El parametro correspondiente, como en
f(int(*p)[5]) {...}, tiene que ser un puntero hacia una tabla de 5 enteros.
Pasar como argumento un puntero hacia otro tipo de table sería un error, por
lo cual los llamamientos serán de la forma:
int tabla[5];
f( & tabla );
También valdría
int matriz[3][5];
f( matriz+1 ); /* equivalente de f( &matriz[1] ) */
y por supuesto también
f( matriz ); /* equivalente de f( &matriz[0] ) */


Antoine

Loading...