leí una pregunta anterior que fue cerrada debido a ser un duplicado exacto de esta¿Por qué el argumento decaimiento a puntero para matriz parece no aplicarse a sizeof()?
When a function has a specific-size array parameter, why is it replaced with a pointer?
y
How to find the 'sizeof' (a pointer pointing to an array)?
pero después de leer este Todavía estoy confundido por la forma en sizeof() trabajos. Yo entiendo que la aprobación de una matriz como un argumento a una función como
void foo(int a[5])
se traducirá en el argumento de matriz en descomposición de un puntero. Lo que no encontré en los enlaces de 2 preguntas anteriores fue una respuesta clara de por qué la función sizeof()
está exenta (o al menos aparentemente exenta de) este comportamiento de disminución de puntero. Si sizeof() se comportaron como cualquier otra función a continuación,
int a[5] = {1,2,3,4,5};
cout << sizeof(a) << endl;
, lo anteriormente expuesto debe ser la salida 4
en lugar de 20
. ¿Me he olvidado de algo obvio, ya que parece ser una contradicción entre el deterioro y el comportamiento del puntero? Perdón por traer esto de nuevo, pero realmente estoy teniendo dificultades para entender por qué sucede esto a pesar de haber utilizado felizmente la función durante años sin realmente pensar en ello.
Nota: 'void foo (int (y a) [5])' will * not * hará que el argumento del array decaiga. Es el objetivo lo que es importante, no la fuente. – Xeo
'void foo (int a [5])' - Realmente me gustaría que la forma del parámetro se desaprobara y solo se permita el formulario 'void foo (int * a)', no causa más que confusión. No me importa quién es el código que rompe. –