Zmienne b i c są niepotrzebne - lepiej wyzerować zmienne a i b bo służą do tego samego (jako licznik pętli) a później do niczego nie są potrzebne w tym przypadku.
Lekko poprawiłem Twój kod - jak porównasz kod sam dojdziesz do wniosku i lepiej zrozumiesz. Jak dalej będzie mętlik w głowie - wyjaśnię.
ps. użytkownikowi lepiej wyliczać od 1, czyli np. "Podaj liczbe ktora bedzie zapisana w kolumnie 1 w wierszu 1", mimo, że będzie ona zapisana w tablica2d[0,0]. Edit: Przepraszam, doczytałem dopiero, że celowo prosisz i drukujesz adres komórki. Nie było tematu. :)
Pozdr.
int x, y, a = 0, i = 0;
Console.WriteLine("Tablice wielowymiarowe");
Console.WriteLine("Podaj liczbe wierszy tablicy");
x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Podaj liczbe kolumn tablicy");
y = Convert.ToInt32(Console.ReadLine());
int[,] tablica2d = new int[x, y];
do
{
while (a < x)
{
Console.WriteLine("Podaj liczbe ktora bedzie zapisana w kolumnie {0} w wierszu {1}", i, a);
tablica2d[a, i] = Convert.ToInt32(Console.ReadLine());
a++;
}
i++;
a = 0;
}
while (i < y);
i = 0;
a = 0;
do
{
while (a < x)
{
Console.WriteLine("W kolumnie {0} wiersza {1} jest liczba", i, a);
Console.WriteLine(tablica2d[a, i]);
a++;
}
i++;
a = 0;
}
while (i < y);
Console.ReadKey();