Wskaźniki do struktur oraz działanie unii- konkretne pytania.

0

Proszę o wytłumaczenie poniższych zagadnień. Załóżmy że mam zadeklarowaną strukturę o nazwie np. Czlowiek. Jednym z elementów tej struktury jest np. imię. Dlaczego używając wskaźników do struktur chcąc przypisać strukturze imie np. Adam używamy funkcji strcpy w taki sposób:

strcpy(Czlowiek->imie, "Ala"); 

, a nie po prostu robimy przypisanie Czlowiek->imie="Adam"?

Drugą kwestią o jaką chciałbym spytać jest takie zagadnienie: załóżmy że mam zadeklarowaną taką unię:

union Liczba{          
    float ulamkowa;
    int calkowita;
}; 

Po czym wywołuję taki kod w funkcji main:

k.calkowita = 5;
printf("Rozmiar unii: %d\twartosc calkowita: %d\twartosc ulamkowa: %f\n", sizeof(k), k.calkowita, k.ulamkowa);
k.ulamkowa = 5; 
printf("Rozmiar unii: %d\twartosc calkowita: %d\twartosc ulamkowa: %f\n", sizeof(k), k.calkowita, k.ulamkowa);

Dlaczego wyniki wywołań funkcji printf są tak różne? Poniżej zamieszczam wyniki wywołań:

Rozmiar unii: 4 wartosc calkowita: 5 wartosc ulamkowa: 0.000000
Rozmiar unii: 4 wartosc calkowita: 1084227584 wartosc ulamkowa: 5.000000

Proszę o rozjaśnienie mi w głowie, pozdrawiam :)

1
  1. bo char* nie jest obiektem np typu string dla ktorego jest przeciazony operator przypisania =. w C++ mozliwe jest
string st = "Ab";
st+= "CeDe";

dodatkowo musisz uwazac zeby zmiescic sie w zaalakowanej pamieci dla wskaznika imie
2. bo unia to taka struktura, ktora ma rozmiar rowny sizeof(najwiekszego elementu), mozna w niej przechowac tylko jedna wartosc w tym samym czasie;
edit. float i int maja zazwyczaj po 4ry bajty wiec ta unia ma tylez. pewnie 5 floatowo to 1084227584 intowo. polecam przeczytac wiecej jak trzymane sa liczby w kompie https://pl.wikipedia.org/wiki/IEEE_754

1
  1. Spróbuj zmodyfikować sobie ten tekst bez strcpy
  2. Poczytaj o tym jak reprezentowane są liczby całkowite z znakiem, bez znaku, a jak liczby zmiennoprzecinkowe.

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