Программирование на C

Оператор Sizeof на языке C

Оператор Sizeof на языке C
В этой статье мы узнаем об операторе sizeof в C. Это широко используемый унарный оператор при разработке встроенного программного обеспечения, который помогает нам определить размер операнда. Следовательно, возвращаемое значение оператора sizeof помогает нам понять количество байтов, выделенных в памяти компьютера для хранения конкретной переменной или типа данных.

Понимание Sizeof:

Прежде чем мы углубимся в обсуждение оператора sizeof, давайте сначала разберемся в значении оператора. Оператор представлен токеном или символом, который используется для выполнения таких операций, как сложение, вычитание, умножение, деление и т. Д. по значениям или переменным (операндам). Например, «*» - это символ, который используется для представления операции умножения, и он работает с двумя операндами (result = a * b;). Это пример бинарного оператора.

Однако, если оператор работает только с одним операндом, мы называем такой оператор унарным оператором. Оператор sizeof является одним из унарных операторов, существующих в языке программирования C, и, по-видимому, он работает только с одним операндом. Оператор sizeof возвращает размер операнда. Это означает, что из возвращаемого значения оператора Sizeof мы можем четко сказать, сколько байтов выделено для хранения конкретного операнда в памяти компьютера.

Память компьютера - это совокупность блоков памяти (я.е. байт). Когда sizeof (int) возвращает четыре в конкретной компьютерной системе, мы можем сказать, что целочисленная переменная занимает 4 байта для хранения своего значения в памяти этой конкретной компьютерной системы. Также обратите внимание, что возвращаемое значение оператора sizeof также зависит от компьютеров, которые вы используете (32-битная система или 64-битная система).

Синтаксис:

Sizeof (тип)
Sizeof (выражение)

Тип возврата sizeof - size_t.

Примеры:

Теперь, когда мы понимаем оператор sizeof и знаем синтаксис, давайте рассмотрим пару примеров, которые помогут нам лучше понять концепцию.

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 и т. Д. в куче памяти.

Shadow of the Tomb Raider для Linux Учебное пособие
Shadow of the Tomb Raider - двенадцатое дополнение к серии Tomb Raider - франшизе приключенческой игры, созданной Eidos Montreal. Игра была очень хоро...
Как увеличить FPS в Linux?
FPS означает Кадров в секунду. Задача FPS - измерить частоту кадров при воспроизведении видео или во время игры. Проще говоря, количество непрерывных ...
Лучшие игры Oculus App Lab
Если вы владелец гарнитуры Oculus, вы должны знать о загрузке неопубликованных приложений. Боковая загрузка - это процесс установки на гарнитуру содер...