W języku C++ dysponujemy mechanizmem tzw. inicjalizacji zbiorczej. Możesz tablicę zainicjalizować zbiorczo. Robisz to tak:
int tab[ 3 ][ 3 ] =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
Przy czym pragnę zaznaczyć, że to działa tylko przy inicjalizacji. Czyli tylko w momencie tworzenia tablicy. Późniejsze takie przypisanie się nie uda.
Dzięki takiej inicjalizacji zbiorczej uzyskujemy tablicę uzupełnioną odpowiednio: tab[ 0 ][ 0 ] = 1, tab[ 0 ][ 1 ] = 2, tab[ 0 ][ 2 ] = 3, tab[ 1 ][ 0 ] = 4, tab[ 1 ][ 1 ] = 5 i tak dalej...
Jest jeszcze jeden mechanizm, który stosują kompilatory C++. Czasami chcemy (tak jak Ty teraz), aby cała tablica miała na początku 0. I jest to możliwe. Działa to w sposób następujący:
int tab[ 3 ][ 3 ] = { 5 };
Powyższy zapis sprawi, że pierwszy element tablicy będzie miał przypisaną wartość 5. Czyli:
tab[ 0 ][ 0 ] == 5
Natomiast, wszystkie pozostałe elementy tablicy będą zainicjalizowane zerem.
To znaczy, że jeśli chcesz uzyskać cała tablicę wypełnioną zerem, to piszesz tak:
int tab[ 3 ][ 3 ] = { 0 };
To również działa tylko przy tworzeniu tablicy.
Gdybyś zainicjalizował zbiorczo tylko fragment tablicy, to pozostałe jej elementy będą zainicjalizowane zerami.
Po utworzeniu tablicy i niezainicjalizowaniu jej od razu: int tab[ 3 ][ 3 ] taka możliwość przepada. Wtedy pozostaje Ci wpisywać do tablicy wartość po wartości. (najlepiej w pętli. Nie tak jak Ty w swoim kodzie)
Odpowiadając ostatecznie na Twoje pytanie. Jeżeli stworzysz tablicę int'ów i zechcesz ją wypisać, to w konsoli musi się coś pojawić. int to liczba. Nie istnieje coś takiego jak nic. Jeśli chcesz aby tablica uzupełniona zerami nie była wypisywana, to zrób tak:
cout << (char)tab[ 0 ][ 0 ];
I w ten sposób wypisuj każdy element. Aczkolwiek takie rozwiązanie nie ma żadnego sensu. Nie wiem co Ty kombinujesz, ale CO TY KOMBINUJESZ? :-D