Uczę się języka c i zawsze mylę się ze zwrotem tablicy za pomocą wskaźników. Moje pytanie brzmi:
Chcę przeczytać i zadeklarować tablicę 2D w środku
int ** readMatrix(int rows,int cols);
funkcjonować
i wróć do main ()
proszę dać mi rozwiązanie w prostym języku, ponieważ przeglądałem już wiele książek, ale nie mogłem zrozumieć. Dziękuję Ci
Odpowiedzi:
0 dla odpowiedzi № 1Aby zainicjować pamięć dla tablicy 2D w innej funkcji z zamiarem użycia tej samej pamięci poza tą funkcją, musisz użyć malloc, aby poprosić o wymaganą pamięć z systemu operacyjnego.
Malloc zwraca początkowy wskaźnik pustkiadres żądanego bloku pamięci lub NULL, jeśli żądanie nie mogło zostać obsłużone z systemu operacyjnego, co obecnie jest bardzo mało prawdopodobne, ponieważ oznacza to, że skończyła się pamięć. malloc doc
Jeśli chcesz utworzyć tablicę wskaźnika typu Int, musisz wykonać następujące czynności
int ** readMatrix(int rows,int cols){
int** var = (int**) malloc(sizeof(int)*rows); //Here you allocate the memory for the pointer which will later point the the columns
for (int i=0; i<r; i++)
arr[i] = (int *)malloc(cols * sizeof(int)); //Here you allocate the columns
return var;
}
innym sposobem byłoby odwzorowanie tablicy 2D na tablicę 1D. Co mam na myśli przez mapowanie? Pokażę to na przykładzie:
Jeśli chcesz zmapować wszystkie elementy z tablicy 2Dna tablicę 1D tablica 1D musi mieć taką samą liczbę elementów jak tablica 2D, w przeciwnym razie można by pominąć elementy. Następnie potrzebujesz jakiegoś wzoru, aby obliczyć indeks z tablicy 2D na tablicę 1D. Wzór jest następujący: y * szerokość + x
Szerokość reprezentuje maksymalną liczbę elementów, które może zawierać jeden rząd tablicy 2D. X oznacza pozycję w bieżącym wierszu, a Y oznacza wiersz, w którym aktualnie się znajdujesz.
w C wyglądałoby to tak:
int* var = malloc(sizeof(int)*rows*cols);
for(int i = 0; i < row; i++)
for(int j = 0; j < cols; j++)
var[i*cols+j] = 0;