/ / jak zwrócić tablicę 2D do main () [duplikat] - c

jak zwrócić tablicę 2D do main () [duplicate] - c

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 № 1

Aby 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

widzieć

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;