Jak tablicę dwuwymiarową odebrać w funkcji jako wskaźnik ?
void fun(int **wsk); // deklaracja funkcji;
int tab[10][10];
//jak wywołać taką funkcję ? dla tablicy jednowymiarowej podawało się jej nazwę, czyli adres zerowego elementu
Jak tablicę dwuwymiarową odebrać w funkcji jako wskaźnik ?
void fun(int **wsk); // deklaracja funkcji;
int tab[10][10];
//jak wywołać taką funkcję ? dla tablicy jednowymiarowej podawało się jej nazwę, czyli adres zerowego elementu
Tak samo.
fun(tab);
Przydała by się jeszcze wiedza o wymiarach.</del>
E, nie. Sam sobie odpowiedziałeś niżej i masz rację. My bad.
Jeśli tak napisze to visual od razu podkreśla mi argument funkcji i daje wskazówkę - Error: argument of type "int (*)[10]" is incompatible with parameter of type "int **" Podczas próby kompilacji - error C2664: 'fun' : cannot convert parameter 1 from 'int [10][10]' to 'int **' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Przy takim wywołaniu jak
fun(tab);
deklaracja powinna wyglądać chyba tak:
void fun(int (*t)[10]);
Deklaracja:
void fun (int **)
jest chyba niepoprawna w tym wypadku na takiej samej zasadzie jak :
int** ptr = new int[value][10];
#include <stdio.h>
int rowcol(int *tab, unsigned int rows, unsigned int cols, unsigned int idx_row, unsigned int idx_col) {
if ( (idx_row > rows) || (idx_col > cols) )
return 0;
return tab[(idx_row * cols) + idx_col];
}
int main(int argc, const char *argv[])
{
int tab[2][10] = {
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
};
printf("%d, %d\n", tab[1][5], rowcol((int*)tab, 2, 10, 1, 5));
return 0;
}
Odwoływanie się po indeksach w funkcji jest... powiedzmy trudne. Postaw się w sytuacji funkcji. Dostajesz namiary na blok pamięci i ktoś Cię pyta jaka jest wartość w drugim wierszu, kolumnie piątej. Musisz najpierw wiedzieć ile jest wierszy i kolumn, a takiej informacji nie posiadasz. Blok pamięci o rozmiarze 30 elementów może przechowywać macierz np. 3x10 czy 5x6. Wskaźnikiem możesz jedynie powiedzieć "hej, pod tym adresem pamięci znajduje się początek tablicy intów".