Now try the same example, but with a different typedef:
typedef int * blob;
int main()
{
int n;
blob *a;
cout << "How many rows? ";
cin >> n;
a = new blob[n]; // an array of n blob's
...
}
a[ --]-------->[ ]
[ ]
[ ]
[ ]
....
The type of a is pointer to blob, that is pointer to int *. That is, a is a pointer to a pointer to an int.
It points to the first int an an dynamically created array of n pointers to int's.
Each of these pointers can now be assigned its own array of int's. These will be the rows of the dynamic array!