sintaxis funcion array c++ c sizeof

c++ - funcion - sizeof() c



Diferentes tamaƱos de resultados (4)

El tamaño del parámetro en los sistemas de 32 bits será 4 y en los sistemas de 64 bits compilados con -m64 será 8. Esto se debe a que las matrices se pasan como punteros en las funciones. El puntero es simplemente una dirección de memoria.

¿Por qué n no es igual a 8 en la siguiente función?

void foo(char cvalue[8]) { int n = sizeof (cvalue); }

Pero n hace igual a 8 en esta versión de la función:

void bar() { char cvalue[8]; int n = sizeof (cvalue); }


Las matrices C y C ++ no son objetos de primera clase; no puede pasar matrices a funciones, siempre decaen a punteros.

Sin embargo, puede pasar punteros y referencias a matrices. Esto evita que los límites de la matriz se descompongan. Entonces esto es legal:

template<typename T, size_t N> void foo(const T(&arr)[N]) { int n = sizeof(arr); }


Porque no puede pasar matrices enteras como parámetros de función en C. En realidad, le está pasando un puntero; los paréntesis son azúcar sintáctico. No hay garantías de que la matriz que está señalando tiene el tamaño 8, ya que podría pasar esta función a cualquier puntero de carácter que desee.

// These all do the same thing void foo(char cvalue[8]) void foo(char cvalue[]) void foo(char *cvalue)


En el primer ejemplo, cvalue como parámetro pasado es en realidad solo un puntero a una matriz de caracteres y cuando se toma el tamaño de sizeof() , se obtiene el tamaño del puntero. En el segundo caso, donde lo ha declarado como una variable local, obtiene el tamaño de la matriz completa.