Jak przekazać do funkcji, a następnie w funkcji przekazać wskaźnik do dwuwymiarowej tablicy?

0

Witam, moim problemem jest przeniesienie wskaźniku z funkcji do następnej funkcji, która jest wywoływana. Np Main > A > B > A > Main.
Mniej więcej chce, żeby do punktu B, przechodziła moja tablica.
Przekazanie tablicy do funkcji z main jest jeszcze łatwe. Robię to tak:

printf("%i", rekurencja(tab)); 

Ale, już przekazanie tego dalej skutkuje błędem.

probaszczescia.c:28:5: note: expected ‘short int (*)[3]’ but argument is of type ‘short int’
 int sprawdzczyremis(short int tab[MAXSTAN][MAXSTAN])

Tak próbuje przerzucić tablicę dalej w funkcji:

int remis=sprawdzczyremis(tab[MAXSTAN][MAXSTAN]); 

MAXSTAN jest moją define w której przechowuje stałą liczbową 3.
Ale próba odebrania tego argumentu w funkcji, jest taka:

int sprawdzczyremis(short int tab[MAXSTAN][MAXSTAN]) 

A to skutkuje wyżej wymieniony błąd.
Gdzie robię błąd?

0

Tablice przekazuje sie do funkcji poprzez wskaźnik. Jak wiemy nazwa tablicy jest rownoznaczna ze wskaźnikiem do niej.

0

Podpowiedz nr. 2:

int remis=sprawdzczyremis(tab[MAXSTAN][MAXSTAN]); 
0

@zonkoo22 Albo ja Ciebie zrozumiałem źle, albo ty mnie. Nie wiem. Podpowiedź nr 2. Jest błędna ponieważ przekazuje tą tablicę DWUWYMIAROWĄ dalej, a co skutkuje, że muszę tak zrobić.

  • Deklaracje w main np tab[3][3]
  • przekazuje do funkcji jako argument, ale tab jest wskaźnikiem na pierwszy element więc robię to tak nazwafunkcji(tab)
  • w tej funkcji jako argument funkcji, odbieram ją tak short int tab[3][3]
  • następnie i co się okazało muszę przesłać ją dalej jako wskaźnik na pierwszy element tak samo w mainie. I tutaj tkwił mój problem. np tab
  • i odbieram tak samo jak przyjmowałem w funkcji.
    Dziękuje za pomoc i chęci.
0

Tu są trzy podstawowe sposoby na przekazanie dwuwymiarowej tablicy:

#include <iostream>
using namespace std;
 
const unsigned MAX=3;
 
void fun3(short Tb[][MAX])
  {
   for(unsigned y=0;y<MAX;++y,cout<<endl) for(unsigned x=0;x<MAX;++x) cout<<Tb[y][x]<<' ';
  }

void fun2(short (*Tb)[MAX][MAX])
  {
   fun3(*Tb);
  }
 
void fun1(short (&Tb)[MAX][MAX])
  {
   fun2(&Tb);
  }
 
int main()
  {
   short Tb[MAX][MAX]={{1,2,3},{4,5,6},{7,8,9}};
   fun1(Tb);
   return 0;
  }

http://ideone.com/gZpgLE

1 użytkowników online, w tym zalogowanych: 0, gości: 1