Разбиране на размера на:
Преди да се потопим в дискусията за размера на оператора, нека първо разберем значението на оператора. Операторът е представен от символ или символ, който се използва за извършване на операция като събиране, изваждане, умножение, деление и т.н. върху стойности или променливи (операнди). Например „*“ е символът, който се използва за представяне на операцията за умножение и работи върху два операнда (резултат = a * b;). Това е пример за двоичен оператор.
Ако обаче оператор работи само върху един операнд, ние наричаме такъв оператор като унарен оператор. Операторът sizeof е един от унарните оператори, които съществуват в програмния език C и очевидно работи само с един операнд. Операторът sizeof връща размера на операнда. Това означава, че от възвръщаемата стойност на оператора Sizeof можем ясно да кажем колко байта са разпределени да държат конкретния операнд в паметта на компютъра.
Паметта на компютъра представлява съвкупност от единици памет (т.е.д. байт). Когато sizeof (int) връща четири в определена компютърна система, можем да кажем, че целочислена променлива отнема 4 байта, за да запази стойността си в паметта на тази конкретна компютърна система. Също така, имайте предвид, че възвръщаемата стойност на оператора sizeof също зависи от машините, които използвате (32-битова система или 64-битова система).
Синтаксис:
Размер (тип)Sizeof (израз)
Типът на връщане sizeof е size_t.
Примери:
Сега, тъй като разбираме оператора sizeof и знаем синтаксиса, нека разгледаме няколко примера, които ще ни помогнат да разберем концепцията по-добре.
- Sizeof за вградени типове (пример1.° С)
- Sizeof за масив (пример2.° С)
- Sizeof за дефинирани от потребителя типове (пример3.° С)
- Sizeof за променливи (пример4.° С)
- Sizeof за израз (пример5.° С)
- Практическо използване на sizeof (пример 6.° С)
Sizeof за вградени типове (пример1.° С):
В тази програма ще видим как операторът sizeof работи за вградени типове данни като int, char, float, double. Нека разгледаме програмата и резултатите.
#includeint main ()
printf ("Размер на символа =% ld \ n", sizeof (char));
printf ("Размер на int =% ld \ n", sizeof (int));
printf ("Размер на поплавъка =% ld \ n", sizeof (поплавък));
printf ("Размер на двойно =% ld \ n \ n", sizeof (double));
printf ("Размер на късото int =% ld \ n", sizeof (краткото int));
printf ("Размер на дълъг int =% ld \ n", sizeof (дълъг int));
printf ("Размер на long long int =% ld \ n", sizeof (long long int));
printf ("Размер на long double =% ld \ n", sizeof (long double));
връщане 0;
Sizeof за масив (пример2.° С)
В тази програма ще видим как да използваме оператора sizeof за различни видове масиви. В случай на масив, операторът sizeof ще се върне (No. на елементите в масива * Sizeof (тип масив)). Например, когато декларираме масив от цяло число от 10 елемента (int SmartPhones [10];), ще се върне sizeof (смартфоните):
(Не. на елементите в SmartPhones * sizeof (int)) = (10 * 4) = 40Нека разгледаме програмата и резултатите.
#includeint main ()
int SmartPhones [10];
char SmartPhoneNames [10];
двойни SmartPhonesPrice [10];
printf ("Размер на int =% ld \ n", sizeof (int));
printf ("Размер на символа =% ld \ n", sizeof (char));
printf ("Размер на двойно =% ld \ n", sizeof (двойно));
/ * Разберете размера на масива * /
printf ("Размер на SmartPhones [10] =% ld \ n", sizeof (SmartPhones));
printf ("Размер на SmartPhoneNames [10] =% ld \ n", sizeof (SmartPhoneNames));
printf ("Размер на SmartPhonesPrice [10] =% ld \ n", sizeof (SmartPhonesPrice));
връщане 0;
Sizeof за дефинирани от потребителя типове (пример3.° С):
В този пример ще видим как да използваме оператора sizeof за дефинирани от потребителя типове данни като структура и обединение. Нека използваме програмата и да разберем резултата.
Сега, разглеждайки програмата, можем ръчно да изчислим размера на SmartPhoneType. Както можете да видите по-долу, SmartPhoneType е структура и съдържа следните елементи:
- Брой променливи от тип символ = 1 [име_на_променливо]
- Брой променливи от цял тип = 1 [sp_version]
- Брой променливи от тип плаващ = 3 [sp_length, sp_width, sp_height]
От пример-1 видяхме, че:
-
- Размерът на символа е 1 байт
- Размерът на цяло число е 4 байта
- Размерът на поплавъка е 4 байта
Следователно, ако съберем размера на всички елементи в структурата, трябва да можем да получим размера на структурата, т.е.д. SmartPhoneType. Следователно размерът на структурата трябва да бъде = (1 + 4 + 4 + 4 + 4) байта = 17 байта. Изходът на програмата обаче казва, че размерът на структурата е 20. Допълнителните 3 байта (sp_name, което е символ, отнема 4 байта вместо 1 байт), разпределени за структурата поради подложката на структурата.
#include/ * Създайте потребителски дефиниран тип структура - SmartPhoneType * /
struct SmartPhoneType
char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhone;
/ * Дефинирайте дефиниран от потребителя тип съюз - SmartPhoneUnionType * /
Union SmartPhoneUnionType
char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhone_u;
int main ()
/ * Разберете размера на структурата и обединението * /
printf ("Размер на структурата =% ld \ n", sizeof (SmartPhone));
printf ("Размер на обединението =% ld \ n", sizeof (SmartPhone_u));
връщане 0;
Sizeof за променливи (пример4.° С):
Тази примерна програма илюстрира, че операторът sizeof може да приеме и променливата и да върне размера на променливата.
#includeint main ()
/ * Деклариране на char, int, float и double type променлива и масив * /
char char_a, var_b [20];
int var_c, var_d [20];
плувка var_e, var_f [20];
двойно var_g, var_h [20];
/ * Разберете размера на променливите и масива.
Тази програма демонстрира, че променливата също може
да се използва като размер на операнда на оператор * /
/ * размер на char, char променлива и масив char * /
printf ("Размер на символа =% ld \ n", sizeof (char));
printf ("Размер на var_a =% ld \ n", sizeof (var_a));
printf ("Размер на var_b [20] =% ld \ n \ n", sizeof (var_b));
/ * размер на int, int променлива и int масив * /
printf ("Размер на int =% ld \ n", sizeof (int));
printf ("Размер на var_c =% ld \ n", sizeof (var_c));
printf ("Размер на var_d [20] =% ld \ n \ n", sizeof (var_d));
/ * размер на float, float променлива и float масив * /
printf ("Размер на поплавъка =% ld \ n", sizeof (поплавък));
printf ("Размер на var_e =% ld \ n", sizeof (var_e));
printf ("Размер на var_f [20] =% ld \ n \ n", sizeof (var_f));
/ * размер на двойна, двойна променлива и двоен масив * /
printf ("Размер на двойно =% ld \ n", sizeof (двойно));
printf ("Размер на var_g =% ld \ n", sizeof (var_g));
printf ("Размер на var_h [20] =% ld \ n", sizeof (var_h));
връщане 0;
Sizeof за израз (пример5.° С):
В този пример на програма ще покажем, че операторът sizeof може също да приеме израз и да върне размера на получения израз.
#includeint main ()
int var_a = 5, var_b = 3;
двоен var_c = 2.5, var_d = 4.5;
printf ("Размер на int =% ld \ n", sizeof (int));
printf ("Размер на двойно =% ld \ n \ n", sizeof (double));
printf ("Размер на var_a * var_b =% ld \ n", sizeof (var_a * var_b));
printf ("Размер на var_c * var_d =% ld \ n", sizeof (var_c * var_d));
/ * Тук умножаваме целочислена променлива с двойна променлива.
Следователно операторът sizeof ще върне размера на максималния размер
променлива i.д. променлива от двоен тип.* /
printf ("Размер на var_a * var_c =% ld \ n", sizeof (var_a * var_c));
връщане 0;
Практическо използване на sizeof (пример 6.° С):
Тази примерна програма ще ви помогне да разберете практически случай на използване на оператора sizeof. Операторът Sizeof е много полезен, докато разпределя динамичната памет от купчина, използвайки malloc. Нека разгледаме програмата и резултатите.
#include#include
typedef struct
char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhoneType;
int main ()
/ * Разпределете паметта в паметта на купчината за съхранение на пет SmartPhoneType
променливи.
* /
SmartPhoneType * SmartPhone_Ptr = (SmartPhoneType *) malloc (5 * sizeof (SmartPhoneType));
ако (SmartPhone_Ptr != NULL)
printf ("Памет, разпределена за 5 променливи на структурата на SmartPhoneType в
паметта на купчината.\н");
друго
printf ("Възникна грешка по време на разпределението на паметта!");
връщане 0;
Заключение:
Sizeof е важен единен оператор в програмния език C. Помага ни при определянето на размера на примитивни типове данни, дефинирани от потребителя типове данни, изрази и т.н. в паметта на компютъра. Операторът Sizeof играе важна роля при разпределянето на динамична памет в C, използвайки malloc, calloc и др. в паметта на Heap.