¿Por qué el tamaño de un parámetro de matriz no es el mismo que el de main?

Resuelto Chris_45 asked hace 14 años • 13 respuestas

¿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));
}
Chris_45 avatar Dec 29 '09 22:12 Chris_45
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*)

Prasoon Saurav avatar Dec 29 '2009 15:12 Prasoon Saurav

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.

user240312 avatar Dec 29 '2009 17:12 user240312