Estate atento porque en este artículo vas a encontrar el resultado que buscas.
Solución:
Sí, se hereda de C. La función:
void foo ( char a[100] );
Tendrá el parámetro ajustado para que sea un puntero, y así se convierte en:
void foo ( char * a );
Si quieres que el array se conserva el tipo, debe pasar una referencia al array:
void foo ( char (&a)[100] );
C++ ’03 8.3.5/3:
…El tipo de una función se determina usando las siguientes reglas. El tipo de cada parámetro se determina a partir de su propio decl-specifier-seq y declarador. Después de determinar el tipo de cada parámetro, cualquier parámetro de tipo “array de T” o “función que devuelve T” se ajusta para que sea “puntero a T” o “puntero a función que devuelve T”, respectivamente…
Para explicar la sintaxis:
Verifique la regla “derecha-izquierda” en google; Encontré una descripción aquí.
Se aplicaría a este ejemplo aproximadamente de la siguiente manera:
void foo (char (&a)[100]);
Empezar en el identificador ‘a’
‘a’ es un
Mover a la derecha – encontramos un )
así que invertimos la dirección buscando el (
. A medida que nos movemos a la izquierda pasamos &
‘a’ es una referencia
Después de la &
llegamos a la apertura (
así que damos marcha atrás de nuevo y miramos a la derecha. ahora vemos [100]
‘a’ es una referencia a un array de 100
Y volvemos a invertir el sentido hasta llegar a char
:
‘a’ es una referencia a un array de 100 caracteres
Sí. En C y C++ no puede pasar matrices a funciones. Esa es la forma como es.
¿Por qué estás haciendo matrices simples de todos modos? has mirado boost
/std::tr1::array
/std::array
o std::vector
?
Tenga en cuenta que puede, sin embargo, pasar una referencia a un array de longitud arbitraria a una función modelo. La parte superior de mi cabeza:
template< std::size_t N >
void f(char (&arr)[N])
std::cout << sizeof(arr) << 'n';
Tienes la posibilidad dar recomendación a este artículo si si solucionó tu problema.