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());