¿Por qué el tamaño de un parámetro de matriz no es el mismo que el de main?
¿Por qué el tamaño de una matriz enviada como parámetro no es el mismo que dentro de main?
#include <stdio.h>
void PrintSize(int p_someArray[10]);
int main () {
int myArray[10];
printf("%d\n", sizeof(myArray)); /* As expected, 40 */
PrintSize(myArray);/* Prints 4, not 40 */
}
void PrintSize(int p_someArray[10]){
printf("%d\n", sizeof(p_someArray));
}
Aceptado
Un tipo de matriz se convierte implícitamente en un tipo de puntero cuando lo pasa a una función.
Entonces,
void PrintSize(int p_someArray[10]) {
printf("%zu\n", sizeof(p_someArray));
}
y
void PrintSize(int *p_someArray) {
printf("%zu\n", sizeof(p_someArray));
}
son equivalentes. Entonces lo que obtienes es el valor desizeof(int*)
Es un puntero, por eso es una implementación común pasar el tamaño de la matriz como segundo parámetro a la función.