Para eso amigo mío, están los punteros y la memoria dinámica. Puedes reservar tanta memoria como creas necesaria en ese momento.
Voy a suponer que estás usando C++, este sería el código:
Código:
class Prueba {
private:
int Nb;
int Nk;
int Nr;
int key[];
int* w[4]; // Array de 4 punteros
public:
void metodoX(){
// Cuando ya tengas claro el tamanyo de la matriz
for (int i = 0; i < 4;i++)
w[i] = new int[Tamanyo]; // Cada puntero crea una fila de la matriz
}
Y actuarias igual, eso si. La memoria dinámica no se borra sola y tendrás que limpiarla cuando termines:
Código:
for (int i = 0; i < 4;i++)
delete[] w[i];
Para más información sobre la memoria dinámica y punteros:
http://c.conclase.net/curso/index.php?cap=017#inicio