Na 90% oba sposoby (w tym konkretny przypadku) po skompilowaniu będą wyglądały w ten sam sposób (mam na myśli wynikowy kod maszynowy) - a to z prostego względu, tablice w sposobie 1 będą zajmowały ciągły obszar pamięci (stos) - tak samo jak w sposobie 2.
Napisałeś że to program w c++, a jedyne z czego skorzystałes to strumienie i deklaracja zmiennych w środku funkcji.
Osobiści wole "garbate" nazwy funkcji i zmiennych (podkreślniki używam w innych przypadkach np. w nazwach stałych),
czyli napisałbym np. void WprowadzMacierz(int**, int, int);
i z tego co obserwuje to jest to bardziej popularna praktyka - ale każdy pisze tak jak lubi (no chyba że pracuje w zespole :) ) - chciałem pokazać tylko inny sposób nazewnictwa
Macierze mają stały rozmiar, przez co ograniczasz użytkownika do macierzy maksymalnie 10 x 10, użyłbym alokacji dynamicznej (new [] i delete [])
(kmac) && (wmac) - miałeś chyba na myśli (kmac > 0) && (wmac > 0) - (kmac) zwróci true dla każdej wartości różnej od 0 (dla ujemnych również)
Parametr int macierz[][10] zamieniłbym na int** macierz
macC jest niepotrzebnie zerowana
Jeżeli nie zależy Ci na zwróconej wartości podczas inkrementacji/dekrementacji "++"/"--", a jedynie dbasz o zmiane wartości zmiennej to zalecałbym stosowanie symbolu przed nazwa zmiennej (++zmienna), będzie szybcie (tutaj nie będzie widać różnicy, ale przy dużych obiektach i wielu operacjach da się to odczuć) - ! pamiętaj że zwrócone wartości się różnią i nie wszędzie da się to zastosować
Działanie na macierzach napisałbym w formie klasy - jest to dużo czytelniejsza i wygodniejsza(pod każdym względem) forma