typedef struct pracownik {
char imie[20];
char nazwisko[50];
int urodziny;
double wynagrodzenie1;
double wynagrodzenie2;
double wynagrodzenie3;
double wynagrodzenie4;
double srednie;
}pracownik;
main()
{
printf("Ilu pracownikow chcesz wprowadzic: ");
while(scanf("%d", &x)!=1)
{
printf("Blad! sprobuj jeszcze raz!");
}
pracownik *dane=(pracownik*)malloc(sizeof(pracownik)*x); /*przypisanie dane adresu pierwszego elementowi tablicy x wartosci pracownik */
setPracownik (&dane[0] , x);
}
setPracownik (pracownik *p, int n) //funkcja wpisująca dane do struktury
{
int i, x=n;
puts("Wprowadzanie danych: \n");
for(i=0; i<x; i++)
{
printf("Podaj imie: ");
scanf("%s",(p+i)->imie);
printf("Podaj nazwisko: ");
scanf("%s",(p+i)->nazwisko);
printf("Podaj rok urodzenie: ");
scanf("%d",&p[i].urodziny);
printf("Podaj wynakrodzenie za I kwartal: ");
scanf("%lf", p[i].wynagrodzenie1);
printf("Podaj wynagrodzenie za II kwartal: ");
scanf("%lf", p[i].wynagrodzenie2);
printf("Podaj wynagrodzenie za III kwartal: ");
scanf("%lf", p[i].wynagrodzenie3);
printf("Podaj wynagrodzenie na IV kwartal: ");
printf("%lf",p[i].wynagrodzenie4);
printf("Podaj srednie wynagrodzenie: ");
scanf("%lf", p[i].srednie);
system ("cls");
}
}
- Zastanawiam się dlaczego skoro alokując pamieć w tablicy dane ,mam adres jej pierwszego elementu, a mimo to nie mogę przy wartości int i float operować wskaźnikami. Program się wysypuje.
- Dlaczego mimo ,iż p[i] wskazuje na adres muszę przed tą tablicą dodać "&" ?
- Jak ma za alokować pamieć by móc swobodnie poruszać się wskaźnikami w funkcji wpisz?
- Pytanie dodatkowe:
Czy zapis (*wsk).urodziny
i zapis wsk->urodziny jest tym samym, czyli przy zapisie wsk->urodziny odwołuję się do komórki z danymi a nie adresu zmiennej?