[C con Clase] Tamanyo de una matriz externa dentro de una funcion

srd4121 en njit.edu srd4121 en njit.edu
Jue Nov 27 23:10:24 CET 2008


Hola Narcis,

Quoting Narcis Garcia - GiLUG <informatica en actiu.net>:

> Entiendo entonces que para pasar matrices a una función de momento no
> hay más remedio que añadir un parámetro con su tamaño, debido a que este
> dato (o su referencia) se pierde por el camino.
> 

Bueno, no es que se pierda, es que sencillamente no pertenece al tipo de dato
que se pasa a la función. Internamente, un parámetro declarado de un tipo de
array realmente es un puntero. Por ejemplo,

void func( int lista[] );

es equivalente a,

void func( int *lista );

Asimismo,

void func2( int matriz[][10] );

es equivalente a,

void func2( int (*matriz)[10] );

Al final, se trata de un puntero. Esto forma parte del diseño de ambos lenguajes
de C y C++.

> C++ debe almacenar en algun lugar lo que ocupa una matriz. ¿Este dato
> sólo es accesible mediante la precaria función sizeof() ? ¿Cómo lo hace
> sizeof() para encontrar el tamaño de los datos de una matriz?
> 

En primer lugar, 'sizeof' no es una función, sino un operador. En cuanto a la
determinación del tamaño del array, efectivamente el compilador conoce su
tamaño. Por lo tanto, 'sizeof' también lo conoce. Sin embargo, con la
explicación anterior, 'sizeof' no conoce el array original, sino el puntero que
es el parámetro local. En el ejemplo anterior, 'sizeof' se basa en el parámetro
'lista' o 'matriz', según la versión que elijas.


Espero haber aclarado el tema.

Steven





Más información sobre la lista de distribución Cconclase