C++

0

Mam takie pytanko w sumie to nie jest problem ale:
normalnie mam takie coś:

char znak ;
char *wznak ;
-----------------z czego wynika co następuje-------------------------------
sizeof(znak) // 1bajt (taki rozmiar danych)
sizeof(wznak) // 4 bajty (rozmiar na zapis miejsca w pamięci)

a jeśli mam klase np.:

class klasa
{
char znak ;
int liczba ;
} ;
...
klasa normalnie ;
klasa *wskaznik ;

sizeof(normalnie) // to będzie 1 + 4 => 5
sizeof(*wskaznik) // 4 jak wiadomo

i pytanie polega na tym, że jak robie np. w C++ Builder ;
przy odniesieniu do interfejsu lub danych typu:
Label1->Caption // używam ->

z czego wywnioskowalem, że Label1 jest wskaźnikiem czyli
sizeof(Label1) powinno zwrucić 4 a zwraca coś więcej teraz nie pamiętam ile ale będzie bowyżej 20.

  • czyli Label1 to wskaźnik (wynika z użycia ->)
  • czy może nie wskaźnik (nie wynika z użycia -> ale zato sizeof() zwraca więcej niż cztery)
0

Może dlatego, że te wskaźniki nie są 'normalne' tylko w jakiś sposób 'dopakowane' (z różnymi bajerami, jak wskaźnik do właściwego obiektu, wskaźnik do RTTI i kilka innych wskaźników).

0

sizeof(normalnie) // to będzie 1 + 4 => 5
sizeof(*wskaznik) // 4 jak wiadomo

i pytanie polega na tym, że jak robie np. w C++ Builder ;
przy odniesieniu do interfejsu lub danych typu:
Label1->Caption // używam ->
z czego wywnioskowalem, że Label1 jest wskaźnikiem (...)

Zauważ jedną istotną różnicę:
wskaznik jest wskaźnikiem na klasę klasa
Label1 jest wskaźnikiem na klasę TLabel
ALE:
próbujesz porównać wyniki dwóch INNYCH operacji:
sizeof(*wskaznik) i sizeof(Label1)
w pierwszym przypadku do operatora sizeof stosujesz jako parametr wskaźnik, natomiast w drugim podajesz cały obiekt (bo nie użyłeś gwiazdki).

Jeszcze co do użycia operatora "->"
Owszem, mówi on nam, że pracujemy ze wskaźnikiem na obiekt. Jeśli obiekt tworzony byłby statycznie, to użyty zostałby operator "." (kropka)

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