2014-04-13 15 views
5

Pisałem kod, który wymaga obsługi tablicy 2D o wymiarach [101] X [101] w C. Jednak jestem ograniczony pod względem pamięci używanej w danym momencie.Zarządzanie pamięcią podczas wywołania funkcji

void manipulate(int grid_recv[101][101]) 
{ 
    //Something 
} 

void main() 
{ 
    int grid[101][101]; 
    manipulate(grid); 
} 

Więc powiedzmy, że tworzę tablicę siatkę [101] [101] w moim main() a następnie przekazać go do manipulacji do innej funkcji. Teraz jest funkcja manipulować() skopiować całą macierz siatkę w grid_recv tj przez tego rodzaju przejścia używam dwukrotnie ilość pamięci (czyli dwukrotnie większy od siatki)?

Odpowiedz

9

Nie. W języku C tablice nie mogą być przekazywane jako parametry funkcji.

Co właściwie robisz, to tworzenie wskaźnika wskazującego tablicę. Więc dodatkowa pamięć to tylko rozmiar utworzonego wskaźnika.

+0

Więc co to znaczy, że nawet jeśli otrzymam tablicę jako grid_recv [101] [101] (a nie int ** grid_recv), nadal otrzymuję wskaźnik? Więc w jaki sposób rozmiar macierzy jest włączony do obrazu? – Dubby

+0

@Dubby Tak, chodzi mi o to, że nie ma możliwości przekazania tablicy jako parametru w C. Nie jestem pewien, o co pytasz, ale jeśli potrzebujesz funkcji tablicy w funkcji, musisz ją przekazać jako dodatkowy argument. – chrk

+0

Dzięki! To odpowiada na moje pytanie :) I ostatnie pytanie: jak zdecydować, kiedy użyć reprezentacji int ** arr i reprezentacji int arr [n] [n] do zainicjowania tablicy 2D? Czy też C pozwala na inicjowanie tablic o zmiennych rozmiarach? – Dubby