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

Sizeof оператор на C език

Sizeof оператор на C език
В тази статия ще научим за размера на оператора в C. Той е широко използван единен оператор при разработването на вграден софтуер, който ни помага да разберем размера на операнда. Следователно възвръщаемата стойност на оператора sizeof ни помага да разберем броя на байтовете, разпределени в паметта на компютъра, за да съдържат конкретната променлива или тип данни.

Разбиране на размера на:

Преди да се потопим в дискусията за размера на оператора, нека първо разберем значението на оператора. Операторът е представен от символ или символ, който се използва за извършване на операция като събиране, изваждане, умножение, деление и т.н. върху стойности или променливи (операнди). Например „*“ е символът, който се използва за представяне на операцията за умножение и работи върху два операнда (резултат = a * b;). Това е пример за двоичен оператор.

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

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

Синтаксис:

Размер (тип)
Sizeof (израз)

Типът на връщане sizeof е size_t.

Примери:

Сега, тъй като разбираме оператора sizeof и знаем синтаксиса, нека разгледаме няколко примера, които ще ни помогнат да разберем концепцията по-добре.

Sizeof за вградени типове (пример1.° С):

В тази програма ще видим как операторът sizeof работи за вградени типове данни като int, char, float, double. Нека разгледаме програмата и резултатите.

#include
int 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

Нека разгледаме програмата и резултатите.

#include
int 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 може да приеме и променливата и да върне размера на променливата.

#include
int 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 може също да приеме израз и да върне размера на получения израз.

#include
int 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.

HD Remastered Games за Linux, които никога преди не са имали издание на Linux
Много разработчици и издатели на игри излизат с HD ремастер на стари игри, за да удължат живота на франчайза, моля феновете, които искат съвместимост ...
Как да използвам AutoKey за автоматизиране на Linux игри
AutoKey е програма за автоматизация на настолни компютри за Linux и X11, програмирана в Python 3, GTK и Qt. Използвайки неговата функционалност за скр...
Как да покажа брояч на FPS в игрите на Linux
Linux игрите получиха голям тласък, когато Valve обяви поддръжка на Linux за Steam клиент и техните игри през 2012 г. Оттогава много AAA и независими ...