Ta linia ogólnie się nie skompiluje.
Wskaźnik wskazuje na vector<vector<int>>, więc dereferencja z użyciem * daje Ci... referencję na vector<vector<int>>. Którego cout nie potrafi wypisać.
Vector to złożony obiekt trzymający w środku własne wskaźniki na stertę. Samo posiadanie wskaźnika na vector nie ma żadnego związku z buforem który jest przez niego zarządzany (wartością matrix[0] czy matrix[0][0]).
W każdym razie adres pierwszego wiersza (tym samym adres na tablicę wierszy) to byłby
cout << matrix.data() << "\n";
cout << &matrix[0] << "\n"; // alternatywnie
A adres pierwszej komórki pierwszego wiersza (tym samym adres na tablicę komórek pierwszego wiersza):
cout << matrix[0].data() << "\n";
cout << &matrix[0][0] << "\n"; // alternatywnie