AnsiString na char * i przesylnia tablicy 2d do fun i odebra

0

Witam.

  1. Nie moglem nic znalezc na ten temat. Jak wyslac do funkcji tablice dwu-wymiarowa i odebrac ja przez wskaznik? Myslalem, ze tak samo jak tablice jedno-wymiarowa, bo w koncu przeciez wysyla sie tylko adres 0 elementu tablicy(czyli nazwe):
TKafel Mapa[13][13] ;

void fun(TKafel *wsk) ; 
fun(Mapa) ;

ale to nie dziala, wiec jak to zrobic zeby odebrac tab2d przez wskaznik?

  1. W swojej funkcji mam argument typu char *, a chce wyslac do tej funkcji nazwe pliku SaveDialog->FileName. W jaki sposob dokonac konwersji?
0

odnosnie 1 to tak to ma chyba wygladac

void fun(TKafel Mapa[][13]) ;

0

tzn zamiast Mapa wstaw sobie wsk[][13] zeby nie bylo :)

0

Nie ja nie chce w ten sposob, bo to to wiem ze tak mozna, ale ja chce to odebrac przez wskaznik, tak jak mozna jednowymiarowa przez void fun(TKafel *wsk) ;

0

to dodaj druga gwiazdke jak nie chcesz podawac zadnych wielkosci
void fun(TKafel **wsk) ;
mozesz potem uzyc
wsk[1][2]=8;

0

do 1: to co zapisales dzialaloby owszem ale troszke inaczej dobrze ujales ze sama nazwa tablicy nie wazne czy to bedzie 1, 2, 3 czy ilu tam wymairowej to zawsze jest adres wskazujacy na pierwszy jej element:
jesli chcialbys przekazac to poprzez wskaznik na TKafel nie ma problemu adres to adres tylko ze raz przekazujesz wskaznik na wskaznik na strukture TKafel a do funkcji przekazujesz wylacznie wskaznik na TKafel wiec w funkcji musialbys uzyc rzutowania ponownie:
TKafel **kafel = (TKafel**)&kafel;
i dopiero pozniej odwolywac sie do poszczegolnym elementow tablicy poprzez 'kafel' ale ogolem nie bede Ci tutaj macil tylko jest prosta zasada na to: po prostu przyjmij sobie ze tablica jest niczym innym jak stalym wskaznikiem(nie mozna przypisac mu innego adresu) na jej pierwszy element czyli:
typ tab[rozmiar] <=> typ *tab
typ tab[rozmiar][rozmiar] <=> typ tab (z tym ze nie do konca bo kompilator widzi to jako typ (*)[rozmiar] wiec przy przypisaniu do odpowiadajacego wskaznika trzeba juz uzywac konwersji (typ)
itd...

odnosnie 2 pytania:
SaveDialog1->FileName.c_str()

jesli chcialbys przekazac do funkcji poprzez wskaznik na lancuch.
jesli chcesz dokonac calkowitej konwersji z lancucha Ansistring na lancuchy w jezyku C musisz zastosowac taki zapis:

char *str = new char[SaveDialog1->FileName.Length()+1]; 
strcpy(str, SaveDialog->FileName.c_str());
0

Wielkie dzieki Maker, nareszcie dziala ;)

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