Понимание Sizeof:
Прежде чем мы углубимся в обсуждение оператора sizeof, давайте сначала разберемся в значении оператора. Оператор представлен токеном или символом, который используется для выполнения таких операций, как сложение, вычитание, умножение, деление и т. Д. по значениям или переменным (операндам). Например, «*» - это символ, который используется для представления операции умножения, и он работает с двумя операндами (result = a * b;). Это пример бинарного оператора.
Однако, если оператор работает только с одним операндом, мы называем такой оператор унарным оператором. Оператор sizeof является одним из унарных операторов, существующих в языке программирования C, и, по-видимому, он работает только с одним операндом. Оператор sizeof возвращает размер операнда. Это означает, что из возвращаемого значения оператора Sizeof мы можем четко сказать, сколько байтов выделено для хранения конкретного операнда в памяти компьютера.
Память компьютера - это совокупность блоков памяти (я.е. байт). Когда sizeof (int) возвращает четыре в конкретной компьютерной системе, мы можем сказать, что целочисленная переменная занимает 4 байта для хранения своего значения в памяти этой конкретной компьютерной системы. Также обратите внимание, что возвращаемое значение оператора sizeof также зависит от компьютеров, которые вы используете (32-битная система или 64-битная система).
Синтаксис:
Sizeof (тип)Sizeof (выражение)
Тип возврата sizeof - size_t.
Примеры:
Теперь, когда мы понимаем оператор sizeof и знаем синтаксис, давайте рассмотрим пару примеров, которые помогут нам лучше понять концепцию.
- Sizeof для встроенных типов (example1.в)
- Sizeof для массива (example2.в)
- Sizeof для пользовательских типов (example3.в)
- Sizeof для переменных (example4.в)
- Sizeof для выражения (example5.в)
- Практическое использование sizeof (example6.в)
Sizeof для встроенных типов (example1.в):
В этой программе мы увидим, как оператор sizeof работает для встроенных типов данных, таких как int, char, float, double. Посмотрим на программу и вывод.
#включатьint main ()
printf ("Размер символа =% ld \ n", sizeof (char));
printf ("Размер int =% ld \ n", sizeof (int));
printf ("Размер float =% ld \ n", sizeof (float));
printf ("Размер double =% ld \ n \ n", sizeof (double));
printf ("Размер короткого int =% ld \ n", sizeof (short int));
printf ("Размер long int =% ld \ n", sizeof (long int));
printf ("Размер long long int =% ld \ n", sizeof (long long int));
printf ("Размер длинного двойника =% ld \ n", sizeof (длинное двойное));
возврат 0;
Sizeof для массива (example2.в)
В этой программе мы увидим, как использовать оператор sizeof для различных типов массивов. В случае массива оператор sizeof вернет (Нет. элементов в массиве * Sizeof (тип массива)). Например, когда мы объявляем массив целочисленного типа из 10 элементов (int SmartPhones [10];), sizeof (Smartphones) вернет:
(Нет. элементов в смартфонах * sizeof (int)) = (10 * 4) = 40Посмотрим на программу и вывод.
#включатьint main ()
int SmartPhones [10];
char SmartPhoneNames [10];
двойная цена SmartPhonesPrice [10];
printf ("Размер int =% ld \ n", sizeof (int));
printf ("Размер символа =% ld \ n", sizeof (char));
printf ("Размер double =% ld \ n", sizeof (double));
/ * Узнаем размер массива * /
printf ("Размер смартфонов [10] =% ld \ n", sizeof (SmartPhones));
printf ("Размер SmartPhoneNames [10] =% ld \ n", sizeof (SmartPhoneNames));
printf ("Размер SmartPhonesPrice [10] =% ld \ n", sizeof (SmartPhonesPrice));
возврат 0;
Sizeof для пользовательских типов (example3.в):
В этом примере мы увидим, как использовать оператор sizeof для пользовательских типов данных, таких как структура и объединение. Давайте воспользуемся программой и разберемся с выводом.
Теперь, глядя на программу, мы можем вручную рассчитать размер SmartPhoneType. Как вы можете видеть ниже, SmartPhoneType представляет собой структуру и содержит следующие элементы:
- Количество переменных символьного типа = 1 [sp_name]
- Количество переменных целочисленного типа = 1 [sp_version]
- Количество переменных типа с плавающей запятой = 3 [sp_length, sp_width, sp_height]
Из примера-1 мы увидели, что:
-
- Размер символа - 1 байт
- Размер целого числа 4 байта
- Размер поплавка 4 байта
Следовательно, если мы сложим размеры всех элементов в структуре, мы сможем получить размер структуры, i.е. SmartPhoneType. Следовательно, размер структуры должен быть = (1 + 4 + 4 + 4 + 4) байта = 17 байтов. Однако в выводе программы указано, что размер структуры равен 20. Дополнительные 3 байта (sp_name, который является символом, занимает 4 байта вместо 1 байта), выделенные для структуры из-за заполнения структуры.
#включать/ * Создаем определяемый пользователем тип структуры - SmartPhoneType * /
struct SmartPhoneType
char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhone;
/ * Определяем определяемый пользователем тип объединения - SmartPhoneUnionType * /
Union SmartPhone
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 для переменных (example4.в):
Этот пример программы показывает, что оператор sizeof также может принимать переменную и возвращать размер переменной.
#включатьint main ()
/ * Объявление переменных и массивов типа char, int, float и double * /
char var_a, var_b [20];
int var_c, var_d [20];
float 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));
/ * размер числа с плавающей запятой, переменной с плавающей точкой и массива с плавающей запятой * /
printf ("Размер float =% ld \ n", sizeof (float));
printf ("Размер var_e =% ld \ n", sizeof (var_e));
printf ("Размер var_f [20] =% ld \ n \ n", sizeof (var_f));
/ * размер двойной, двойной переменной и двойного массива * /
printf ("Размер double =% ld \ n", sizeof (double));
printf ("Размер var_g =% ld \ n", sizeof (var_g));
printf ("Размер var_h [20] =% ld \ n", sizeof (var_h));
возврат 0;
Sizeof для выражения (example5.в):
В этом примере программы мы продемонстрируем, что оператор sizeof также может принимать выражение и возвращать размер результирующего выражения.
#включатьint main ()
int var_a = 5, var_b = 3;
двойной var_c = 2.5, var_d = 4.5;
printf ("Размер int =% ld \ n", sizeof (int));
printf ("Размер double =% 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 (example6.в):
Этот пример программы поможет вам понять практический пример использования оператора sizeof. Оператор Sizeof очень полезен при выделении динамической памяти из кучи с помощью malloc. Давайте посмотрим на программу и вывод.
#включать#включать
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 в
Куча памяти.\ n ");
еще
printf ("Ошибка при выделении памяти кучи!");
возврат 0;
Заключение:
Sizeof - важный унарный оператор в языке программирования C. Это помогает нам определять размер примитивных типов данных, пользовательских типов данных, выражений и т. Д. в памяти компьютера. Оператор Sizeof играет важную роль в распределении динамической памяти в C с использованием malloc, calloc и т. Д. в куче памяти.