Los corchetes ‘[]’ que utilizamos para acceder a las matrices no son más que el azúcar sintáctico que nos proporciona el lenguaje. Debajo del capó es simple aritmética de puntero viejo. Entonces, ¿podemos devolver un puntero a un puntero (int **), sí. ¿Puede este puntero a un puntero apuntar a una matriz 2D? Usted apuesta.
Entonces, la respuesta directa es int ** (* foo) (void) , foo es un puntero de función que devuelve int ** y no toma argumentos.
Aquí hay un código para ilustrar más el punto. El héroe aquí es nuevamente foo, devuelve int ** y toma el ancho y la altura de la matriz 2D como argumentos.
- ¿La entrevista con el gerente de contratación es siempre la entrevista final?
- ¿Cuáles son las preguntas formuladas en la entrevista de Tata Steel MT?
- ¿Cómo puedes abordar los enigmas en una entrevista?
- ¿Cuál es la mejor manera de prepararse para la ronda técnica de la entrevista en el sitio de Google para un puesto de gerente de producto?
- ¿Alguien puede compartir sus experiencias de entrevistas en Google, Amazon y Yahoo para el puesto de ingeniería de software?
#include
usando el espacio de nombres estándar;
int ** func (int fila, int col) {
int ** arr;
arr = new int * [fila]; // crea una matriz de punteros de fila.
para (int r = 0; r <fila; ++ r)
{
// para cada fila, asigne una matriz de columna de tamaño para la fila.
arr [r] = nueva int [col];
para (int c = 0; c <col; ++ c)
{
arr [r] [c] = (r * col + c);
}
}
volver arr;
}
int main () {
// el puntero de función a una función que devuelve una matriz 2D.
int ** (* foo) (int, int);
foo = & func;
int ** arr = foo (5,5);
para (int i = 0; i <5; ++ i)
{
para (int j = 0; j <5; ++ j)
cout << arr [i] [j] << "";
cout << endl;
}
devuelve 0;
}