Skocz do zawartości

[C] Wskaźnik do tablicy struktur jako argument funkcji


davidpi

Pomocna odpowiedź

Witam.

Mam zadeklarowaną strukturę, oraz stworzoną tablicę przechowującą instancje tej struktury.

Chciałbym taką tablicę struktur przekazać do funkcji poprzez wskaźnik, jednak ciągle mi to nie wychodzi. Z pojedynczą strukturą sobie radzę, ale z tablicą już nie.

Struktura wygląda tak:

typedef struct
{
double Jacob[STOPIEN][STOPIEN];										//Macierz Jacobiego pochodnych cząstkowych z funkcji
double Jacob_odwr[STOPIEN][STOPIEN];								//Odwrócona macierz jacobiego
double F[STOPIEN];							 						//Wektor wartości funkcji
double H[STOPIEN];													//Wektor przybliżeń szukanych pierwiastków funkcji
double X_0[STOPIEN];												//Wektor wartości startowych pierwiastków w stopniach
double X[STOPIEN];													//Wektor wartości znajdywanych pierwiastków w radianach
double X_Deg[STOPIEN];												//Wektor wartości znajdywanych pierwiastków w stopniach
double WspNaPodst[STOPIEN];											//Współżedne montażu poszczegulnego przegubu na podstawie
double WspNaPlat[STOPIEN];											//Współżedne montażu poszczegulnego przegubu na platformie względem środka platformy
double k1;															//Kąt montażu poszczególnego przegubu na podstawie
double k2;															//Kąt montażu poszczególnego przegubu na platformie
double(*Funkcje[STOPIEN])(double Tab[]);							//Tablica wskaźników do funkcji
double(*Pochodne[STOPIEN][STOPIEN])(double Tab[]);					//Tablica wskaźników do pochodnych funkcji

}Przegub_Dane;

W main() tworzę tablicę struktur w taki sposób, oraz próbuje jakoś utworzyć wskaźnik do tej tablicy. Nie wiem czy dobrze.

int main(int argc, char *argv[]) 
{
Przegub_Dane Przegub[6];
Przegub_Dane* pPrzegub = Przegub;

Przegub_Init(pPrzegub);
return 0;
}

Na koniec funkcja Przegub_Init do której chcę przekazać wskaźnik do tablicy struktur:

void Przegub_Init(Przegub_Dane* S[])
{
S[0]->k1=-k1_0;
       S[1]->k1=-120+k1_0;
S[2]->k1=-120-k1_0;
S[3]->k1=-240+k1_0;
S[4]->k1=-240-k1_0;
       S[5]->k1=k1_0;
}

Program się kompiluje ale zawiesza.

Czy ja w ogóle dobrze realizuje to przekazanie wskaźnika do tablicy struktur do funkcji??

Ewentualnie w jaki inny sposób przekazać tablicę struktur do funkcji?? Może należy zrobić tablicę wskaźników do struktury?? Tylko jak??

Proszę o pomoc. Pozdrawiam

Link do komentarza
Share on other sites

Spróbuj:

void Przegub_Init(Przegub_Dane* S[]) 

->

void Przegub_Init(Przegub_Dane* S) 

i później:

S[0].cosTam1 = 0;
(*(S+1)).cosTam2 = 0;
(S+2)->cosTam3 = 0;

Wszystkie sposoby powinny działać.

Szukałeś rozwiązania w Google? Na pewno ktoś miał podobny problem( niekoniecznie związany uC )

Pozdrawiam

  • Lubię! 1
Link do komentarza
Share on other sites

Dzięki wielkie kamil4u, teraz wszystko działa.

Nawet próbowałem tego trzeciego sposobu, który podałeś, już wcześniej, tylko, że pisałem S+1->k1, czyli bez nawiasu.

Oczywiście szukałem w google. Było nawet parę wyników, ale nie potrafiłem ich przełożyć na mój problem.

Jeszcze raz dzięki.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.