2010/08/25

Rozmowa kwalifikacyjna

Pytania z serii "rozmowa kwalifikacyjna"

jaka jest różnica między poniższymi deklaracjami tab

int function(int tab[])
{
...
}

struct SomeStruct_T
{
   int tab[];
};

Odpowiedz:
deklaracja w parametrze funkcji nie alokuje pamięci na stosie, jest ona równoważna z deklaracja function(int *tab)
deklaracja w strukturze również nie alokuje pamięci ale dostęp do pola tab będzie się odbywał poprzez referencje do pamięci znajdującej sie bezpośrednio za struktura, w ten sposób można tworzyć np tablice o zmiennej długości pamiętając o alokowaniu odpowiedniej ilosci pamięci, np na stercie.

jaka jest roznica miedzy poniższmi deklaracjami field

struct SomeStruct
{
   union field
   {
      int a;
   };
}

struct SomeStruct
{
   union
   {
      int a;
   } field;

}

Odpowiedz:
pierwsza to czysta deklaracja unii o nazwie field, struktura nie allokuje przestrzeni na zadne pole
druga to deklaracja pola field o typie unii anonimowej, struktura będzie miała rozmiar sizeof(int)