W tym artykule dowiemy się o operatorze sizeof w C. Jest powszechnie używanym operatorem Unary w wbudowanym oprogramowaniu, który pomaga nam znaleźć rozmiar operandu. Dlatego wartość zwracana operatora sizeof pomaga nam zrozumieć liczbę bajtów przydzielonych w pamięci komputera w celu utrzymania konkretnej zmiennej lub typu danych.
Zrozumienie rozmiaru:
Zanim zagłębimy się w dyskusję operatora sizeof, najpierw zrozummy znaczenie operatora. Operator jest reprezentowany przez token lub symbol, który służy do wykonywania operacji, takiej jak dodawanie, odejmowanie, mnożenie, podział itp. po wartości lub zmiennych (operanty). Na przykład „ *” jest symbolem używanym do reprezentowania operacji mnożenia i działa na dwóch operantach (wynik = a * b;). To jest przykład operatora binarnego.
Jeśli jednak operator pracuje tylko na jednym operandie, nazywamy taki operator jako nie -operator. Operator SizeOF jest jednym z nieusowych operatorów, które istnieją w języku programowania C i najwyraźniej działa tylko na jednym operandie. Operator sizeof zwraca rozmiar operandu. Oznacza to, że z wartości zwrotnej operatora rozmiar.
Pamięć komputera to zbiór jednostek pamięci (i.mi. bajt). Gdy sizeof (int) zwraca cztery w danym systemie komputerowym, możemy powiedzieć, że zmienna liczb całkowita bierze 4 bajty, aby utrzymać swoją wartość w pamięci tego konkretnego systemu komputerowego. Należy również pamiętać, że wartość zwracania operatora SizeOF zależy również od używanych maszyn (system 32-bitowy lub system 64-bitowy).
Składnia:
Sizeof (typ)
Rozmiar (wyrażenie)
Powrót typu sizeof to size_t.
Przykłady:
Teraz, ponieważ rozumiemy operatora sizeof i znamy składnię, spójrzmy na kilka przykładów, które pomogą nam w lepszym zrozumieniu koncepcji.
- Rozmiar dla wbudowanych typów (przykład1.C)
- Rozmiar dla tablicy (przykład2.C)
- Rozmiar dla typów zdefiniowanych przez użytkownika (przykład3.C)
- Rozmiar dla zmiennych (przykład 4.C)
- Rozmiar wyrażenia (przykład5.C)
- Praktyczne użycie sizeof (przykład6.C)
Rozmiar dla wbudowanych typów (przykład1.C):
W tym programie zobaczymy, jak działa operator sizeof dla wbudowanych typów danych, takich jak int, char, float, podwójne. Spójrzmy na program i wyjście.
#włączać
int main ()
printf („Rozmiar char = %ld \ n”, sizeof (char));
printf („Rozmiar int = %ld \ n”, sizeof (int));
printf („Rozmiar float = %ld \ n”, sizeof (float));
printf („Rozmiar podwójnego = %ld \ n \ n”, sizeof (podwójny));
printf („Rozmiar krótkiego int = %ld \ n”, sizeof (short int));
printf („Rozmiar długiego int = %ld \ n”, sizeof (long int));
printf („Rozmiar długiego int = %ld \ n”, sizeof (długi int));
printf („Rozmiar długiego podwójnego = %ld \ n”, rozmiar (długi podwójny));
powrót 0;
Rozmiar dla tablicy (przykład2.C)
W tym programie zobaczymy, jak korzystać z operatora sizeof dla różnych rodzajów tablicy. W przypadku tablicy powróci operator rozmiaru (nie. elementów w tablicy * sizeof (typ tablicy)). Na przykład, gdy zadeklarujemy tablicę typu liczb całkowitych 10 elementów (smartfony int [10];), powróci rozmiar (smartfony):
(NIE. elementów w smartfonach * sizeof (int)) = (10 * 4) = 40
Spójrzmy na program i wyjście.
#włączać
int main ()
Int smartfony [10];
Char SmartphoneNames [10];
Podwójne Smartfones SPRICE [10];
printf („Rozmiar int = %ld \ n”, sizeof (int));
printf („Rozmiar char = %ld \ n”, sizeof (char));
printf („Rozmiar podwójnego = %ld \ n”, sizeof (podwójny));
/* Znajdź tablicę rozmiaru*/
printf („Rozmiar smartfonów [10] = %ld \ n”, sizeof (smartfony));
printf („Rozmiar nazw smartfoneNames [10] = %ld \ n”, sizeof (smartphoneNames));
printf („Rozmiar Smartfonów [10] = %ld \ n”, sizeof (SmartphoneSsprice));
powrót 0;
Rozmiar dla typów zdefiniowanych przez użytkownika (przykład3.C):
W tym przykładzie zobaczymy, jak korzystać z operatora SizeOF dla typów danych zdefiniowanych przez użytkownika, takich jak struktura i związek. Użyjmy programu i zrozumiemy wyjście.
Teraz, patrząc na program, i możemy ręcznie obliczyć rozmiar smartfonetypu. Jak widać poniżej, smartfonetype jest strukturą i zawiera następujące elementy:
- Liczba zmiennej typu znakowego = 1 [SP_NAME]
- Liczba zmiennej typu liczb całkowitych = 1 [SP_VERSION]
- Liczba zmiennych typu pływakowego = 3 [SP_LENGHT, SP_WIDTH, SP_HEIGHT]
Z przykład-1 widzieliśmy to:
-
- Rozmiar charakteru to 1 bajt
- Rozmiar liczby całkowitej wynosi 4 bajty
- Rozmiar pływaka wynosi 4 bajty
Dlatego jeśli dodamy rozmiar wszystkich elementów w strukturze, powinniśmy być w stanie uzyskać rozmiar struktury, i.mi. Smartfonetype. Dlatego rozmiar struktury powinien wynosić = (1 + 4 + 4 + 4 + 4) bajtów = 17 bajtów. Jednak wyjście programu mówi, że rozmiar struktury wynosi 20. Dodatkowe 3 bajty (SP_Name, która jest znakiem, przyjmuje 4 bajty zamiast 1 bajtów) przeznaczone dla konstrukcji z powodu wyściółki struktury.
#włączać
/* Utwórz typ struktury zdefiniowanej przez użytkownika - smartfonetype*/
Smartfonetype struct
Char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
Smartfon;
/* Zdefiniuj zdefiniowany przez użytkownika typ Unii - smartfonunionType*/
Union SmartphoneUnonType
Char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
Smartphone_u;
int main ()
/* Dowiedz się wielkości struktury i unii*/
printf („Rozmiar struct = %ld \ n”, sizeof (smartfon));
printf („Rozmiar union = %ld \ n”, sizeof (smartphone_u));
powrót 0;
Rozmiar dla zmiennych (przykład 4.C):
Ten przykładowy program pokazuje, że operator sizeof jest w stanie również zaakceptować zmienną i zwrócić rozmiar zmiennej.
#włączać
int main ()
/ * Deklaruj Char, Int, Float i Double Typ Zmienna i tablica */
char var_a, var_b [20];
int var_c, var_d [20];
float var_e, var_f [20];
Double var_g, var_h [20];
/* Znajdź rozmiar zmiennych i tablicy.
Ten program pokazuje, że zmienna może również
być używane jako operator operandów*/
/* rozmiar char, zmienną char i tablicą char*/
printf („Rozmiar char = %ld \ n”, sizeof (char));
printf („Rozmiar var_a = %ld \ n”, sizeof (var_a));
printf („Rozmiar var_b [20] = %ld \ n \ n”, sizeof (var_b));
/* rozmiar int, zmienna int i ma tablica*/
printf („Rozmiar int = %ld \ n”, sizeof (int));
printf („Rozmiar var_c = %ld \ n”, sizeof (var_c));
printf („Rozmiar var_d [20] = %ld \ n \ n”, sizeof (var_d));
/* rozmiar zmiennej, zmiennej zmiennoprzecinkowej i tablicy float*/
printf („Rozmiar float = %ld \ n”, sizeof (float));
printf („Rozmiar var_e = %ld \ n”, sizeof (var_e));
printf („Rozmiar var_f [20] = %ld \ n \ n”, sizeof (var_f));
/* Rozmiar podwójnego, podwójnej zmiennej i podwójnej tablicy*/
printf („Rozmiar podwójnego = %ld \ n”, sizeof (podwójny));
printf („Rozmiar var_g = %ld \ n”, sizeof (var_g));
printf („Rozmiar var_h [20] = %ld \ n”, sizeof (var_h));
powrót 0;
Rozmiar wyrażenia (przykład5.C):
W tym przykładowym programie zademonstrujemy, że operator rozmiaru może również zaakceptować wyrażenie i zwrócić rozmiar powstałego wyrażenia.
#włączać
int main ()
int var_a = 5, var_b = 3;
Double var_c = 2.5, var_d = 4.5;
printf („Rozmiar int = %ld \ n”, sizeof (int));
printf („Rozmiar podwójnego = %ld \ n \ n”, sizeof (podwójny));
printf („Rozmiar var_a * var_b = %ld \ n”, sizeof (var_a * var_b));
printf („Rozmiar var_c * var_d = %ld \ n”, sizeof (var_c * var_d));
/* Tutaj mnożymy zmienną liczbową za pomocą zmiennej podwójnej.
Dlatego operator sizeof zwróci rozmiar maksymalnych rozmiarów
zmienna i.mi. Zmienna typu podwójnego.*/
printf („Rozmiar var_a * var_c = %ld \ n”, sizeof (var_a * var_c));
powrót 0;
Praktyczne użycie sizeof (przykład6.C):
Ten przykładowy program pomoże Ci zrozumieć praktyczny przypadek użycia operatora sizeof. Operator sizeof jest bardzo przydatny podczas przydzielania pamięci dynamicznej z sterty za pomocą Malloc. Spójrzmy na program i wyjście.
#włączać
#włączać
STRUKTYNEK TYPEDEF
Char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartphoneType;
int main ()
/* Przydziela pamięć w pamięci sterty do przechowywania pięciu smartfonetypów
zmienne.
*/
Smartphonetype * smartphone_ptr = (smartphonetype *) Malloc (5 * sizeof (smartphonetype));
if (smartfon_ptr != Null)
printf („pamięć przydzielona dla 5 zmiennych struktury smartfonetypu w
pamięć sterta.\N");
w przeciwnym razie
printf („Błąd wystąpił podczas alokacji pamięci sterty!");
powrót 0;
Wniosek:
Rozmiar jest ważnym nieusowym operatorem w języku programowania C. Pomaga nam w określaniu wielkości prymitywnych typów danych, typów danych zdefiniowanych przez użytkownika, wyrażeń itp. W pamięci komputera. Operator sizeof odgrywa ważną rolę w alokowaniu pamięci dynamicznej w C za pomocą Malloc, Calloc itp. W pamięci sterty.