logo

Типове данни в C

Типът данни указва типа данни, които една променлива може да съхранява, като цяло число, плаващо число, знак и т.н.

C типове данни

В езика C има следните типове данни.

ВидовеТипове данни
Основен тип данниint, char, float, double
Изведен тип даннимасив, указател, структура, обединение
Тип данни за изброяванеизброяване
Празен тип данниневалиден

Основни типове данни

Основните типове данни са целочислени и с плаваща запетая. Езикът C поддържа както знакови, така и неподписани литерали.

Размерът на паметта на основните типове данни може да се променя според 32 или 64-битова операционна система.

микролитно ядро

Нека видим основните типове данни. Размерът му е даден според 32-битова архитектура .

Типове данниРазмер на паметтаОбхват
въглен 1 байт−128 до 127
знак със знак1 байт−128 до 127
неподписан char1 байт0 до 255
къс 2 байта−32 768 до 32 767
подписано кратко2 байта−32 768 до 32 767
неподписан кратък2 байта0 до 65 535
вътр 2 байта−32 768 до 32 767
подписан вътр2 байта−32 768 до 32 767
unsigned int2 байта0 до 65 535
кратко вътр 2 байта−32 768 до 32 767
подписано кратко вътр2 байта−32 768 до 32 767
unsigned short int2 байта0 до 65 535
дълго вътр 4 байта-2,147,483,648 до 2,147,483,647
подписано дълго вътр4 байта-2,147,483,648 до 2,147,483,647
unsigned long int4 байта0 до 4,294,967,295
плавам 4 байта
двойно 8 байта
дълъг двоен 10 байта

Int:

Цели числа са цели числа без дробни или десетични части и int тип данни се използва за тяхното представяне.

Често се прилага към променливи, които включват стойности , като брои, индекси , или други цифрови числа. The int тип данни може да представлява и двете положителен и отрицателни числа защото е подписан по подразбиране.

Ан вътр заема 4 байта памет на повечето устройства, което му позволява да съхранява стойности между около -2 милиарда и +2 милиарда.

знак:

Индивидуалните герои са представени от char тип данни . Обикновено се използва за задържане ASCII или Знаци на UTF-8 схема за кодиране , като букви, цифри, символи , или запетаи . Има 256 знака който може да бъде представен от един символ, който заема един байт памет. Герои като „A“, „b“, „5“, или '$' са оградени в единични кавички.

плаващ:

За да представите цели числа, използвайте плаващ тип данни . Плаващите числа могат да се използват за представяне на дробни единици или числа с десетични знаци.

The тип поплавък обикновено се използва за променливи, които изискват много добра точност, но може да не са много точни. Може да съхранява стойности с точност до около 6 знака след десетичната запетая и диапазон от около 3,4 x 1038 в 4 байта на паметта.

string.format в java

двойно:

Използвайте два типа данни за представяне две плаващи цели числа . Когато е необходима допълнителна прецизност, като например при научни изчисления или финансови приложения, тя осигурява по-голяма точност в сравнение с float.

Двоен тип , който използва 8 байта на паметта и има точност от около 15 знака след десетичната запетая, дава по-големи стойности . C третира числата с плаваща запетая като двойни по подразбиране, ако не е предоставен изричен тип.

 int age = 25; char grade = 'A'; float temperature = 98.6; double pi = 3.14159265359; 

В примера по-горе ние декларираме четири променливи: an int променлива за възрастта на лицето, а char променлива за оценка на ученика, а плаваща променлива за отчитане на температурата и две променливи за число пи.

Изведен тип данни

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

масив:

Ан масив, производен тип данни , ви позволява да съхранявате последователност от елементи с фиксиран размер от същия тип. Той предоставя механизъм за обединяване на множество цели на едни и същи данни под едно и също име.

Индексът се използва за достъп до елементите на масива, с a 0 индекс за първо влизане. Размерът на масива е фиксиран към момента на деклариране и не може да се променя по време на изпълнение на програмата. Компонентите на масива се поставят в съседни области на паметта.

Ето пример за деклариране и използване на масив:

 #include int main() { int numbers[5]; // Declares an integer array with a size of 5 elements // Assign values to the array elements numbers[0] = 10; numbers[1] = 20; numbers[2] = 30; numbers[3] = 40; numbers[4] = 50; // Display the values stored in the array printf(&apos;Values in the array: &apos;); for (int i = 0; i <5; i++) { printf('%d ', numbers[i]); } printf('
'); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> Values in the array: 10 20 30 40 50 </pre> <h3>Pointer:</h3> <p>A <strong> <em>pointer</em> </strong> is a derived data type that keeps track of another data type&apos;s memory address. When a <strong> <em>pointer</em> </strong> is declared, the <strong> <em>data type</em> </strong> it refers to is <strong> <em>stated first</em> </strong> , and then the <strong> <em>variable name</em> </strong> is preceded by <strong> <em>an asterisk (*)</em> </strong> .</p> <p>You can have incorrect access and change the value of variable using pointers by specifying the memory address of the variable. <strong> <em>Pointers</em> </strong> are commonly used in <strong> <em>tasks</em> </strong> such as <strong> <em>function pointers, data structures</em> </strong> , and <strong> <em>dynamic memory allocation</em> </strong> .</p> <p>Here is an example of declaring and employing a pointer:</p> <pre> #include int main() { int num = 42; // An integer variable int *ptr; // Declares a pointer to an integer ptr = # // Assigns the address of &apos;num&apos; to the pointer // Accessing the value of &apos;num&apos; using the pointer printf(&apos;Value of num: %d
&apos;, *ptr); return 0; } </pre> <p> <strong>Output:</strong> </p> <pre> Value of num: 42 </pre> <h3>Structure:</h3> <p>A structure is a derived data type that enables the creation of composite data types by allowing the grouping of many data types under a single name. It gives you the ability to create your own unique data structures by fusing together variables of various sorts.</p> <ol class="points"> <li>A structure&apos;s members or fields are used to refer to each variable within it.</li> <li>Any data type, including different structures, can be a member of a structure.</li> <li>A structure&apos;s members can be accessed by using the dot (.) operator.</li> </ol> <p>A declaration and use of a structure is demonstrated here:</p> <pre> #include #include // Define a structure representing a person struct Person { char name[50]; int age; float height; }; int main() { // Declare a variable of type struct Person struct Person person1; // Assign values to the structure members strcpy(person1.name, &apos;John Doe&apos;); person1.age = 30; person1.height = 1.8; // Accessing the structure members printf(&apos;Name: %s
&apos;, person1.name); printf(&apos;Age: %d
&apos;, person1.age); printf(&apos;Height: %.2f
&apos;, person1.height); return 0; } </pre> <p> <strong>Output:</strong> </p> <pre> Name: John Doe Age: 30 Height: 1.80 </pre> <h3>Union:</h3> <p>A derived data type called a <strong> <em>union</em> </strong> enables you to store various data types in the same memory address. In contrast to structures, where each member has a separate memory space, members of a union all share a single memory space. A value can only be held by one member of a union at any given moment. When you need to represent many data types interchangeably, unions come in handy. Like structures, you can access the members of a union by using the <strong> <em>dot (.)</em> </strong> operator.</p> <p>Here is an example of a union being declared and used:</p> <pre> #include // Define a union representing a numeric value union NumericValue { int intValue; float floatValue; char stringValue[20]; }; int main() { // Declare a variable of type union NumericValue union NumericValue value; // Assign a value to the union value.intValue = 42; // Accessing the union members printf(&apos;Integer Value: %d
&apos;, value.intValue); // Assigning a different value to the union value.floatValue = 3.14; // Accessing the union members printf(&apos;Float Value: %.2f
&apos;, value.floatValue); return 0; } </pre> <p> <strong>Output:</strong> </p> <pre> Integer Value: 42 Float Value: 3.14 </pre> <h2>Enumeration Data Type</h2> <p>A set of named constants or <strong> <em>enumerators</em> </strong> that represent a collection of connected values can be defined in C using the <strong> <em>enumeration data type (enum). Enumerations</em> </strong> give you the means to give names that make sense to a group of integral values, which makes your code easier to read and maintain. </p> <p>Here is an example of how to define and use an enumeration in C:</p> <pre> #include // Define an enumeration for days of the week enum DaysOfWeek { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; int main() { // Declare a variable of type enum DaysOfWeek enum DaysOfWeek today; // Assign a value from the enumeration today = Wednesday; // Accessing the enumeration value printf(&apos;Today is %d
&apos;, today); return 0; } </pre> <p> <strong>Output:</strong> </p> <pre> Today is 2 </pre> <h2>Void Data Type</h2> <p>The <strong> <em>void data type</em> </strong> in the C language is used to denote the lack of a particular type. <strong> <em>Function return types, function parameters</em> </strong> , and <strong> <em>pointers</em> </strong> are three situations where it is frequently utilized.</p> <h3>Function Return Type:</h3> <p>A <strong> <em>void return type</em> </strong> function does not produce a value. A <strong> <em>void function</em> </strong> executes a task or action and ends rather than returning a value.</p> <p> <strong>Example:</strong> </p> <pre> void printHello() { printf(&apos;Hello, world!
&apos;); } </pre> <h3>Function Parameters: </h3> <p>The <strong> <em>parameter void</em> </strong> can be used to indicate that a function accepts no arguments.</p> <p> <strong>Example:</strong> </p> <pre> void processInput(void) { /* Function logic */ } </pre> <h3>Pointers:</h3> <p>Any address can be stored in a pointer of type <strong> <em>void*</em> </strong> , making it a universal pointer. It offers a method for working with pointers to ambiguous or atypical types.</p> <p> <strong>Example:</strong> </p> <pre> void* dataPtr; </pre> <p>The <strong> <em>void data type</em> </strong> is helpful for defining functions that don&apos;t accept any arguments when working with generic pointers or when you wish to signal that a function doesn&apos;t return a value. It is significant to note that while <strong> <em>void*</em> </strong> can be used to build generic pointers, void itself cannot be declared as a variable type.</p> <p>Here is a sample of code that shows how to utilize void in various situations:</p> <pre> #include // Function with void return type void printHello() { printf(&apos;Hello, world!
&apos;); } // Function with void parameter void processInput(void) { printf(&apos;Processing input...
&apos;); } int main() { // Calling a void function printHello(); // Calling a function with void parameter processInput(); // Using a void pointer int number = 10; void* dataPtr = &amp;number; printf(&apos;Value of number: %d
&apos;, *(int*)dataPtr); return 0; } </pre> <p> <strong>Output:</strong> </p> <pre> Hello, world! Processing input... Value of number: 10 </pre> <h2>Conclusion:</h2> <p>As a result, <strong> <em>data types</em> </strong> are essential in the C programming language because they define the kinds of information that variables can hold. They provide the data&apos;s size and format, enabling the compiler to allot memory and carry out the necessary actions. Data types supported by C include <strong> <em>void, enumeration, derived</em> </strong> , and <strong> <em>basic types</em> </strong> . In addition to floating-point types like <strong> <em>float</em> </strong> and <strong> <em>double</em> </strong> , basic data types in C also include integer-based kinds like <strong> <em>int, char</em> </strong> , and <strong> <em>short</em> </strong> . These forms can be <strong> <em>signed</em> </strong> or <strong> <em>unsigned</em> </strong> , and they fluctuate in size and range. To create dependable and efficient code, it is crucial to comprehend the memory size and scope of these types.</p> <p>A few examples of <strong> <em>derived data types</em> </strong> are <strong> <em>unions, pointers, structures</em> </strong> , and <strong> <em>arrays</em> </strong> . Multiple elements of the same kind can be stored together in contiguous memory due to arrays. <strong> <em>Pointers</em> </strong> keep track of memory addresses, allowing for fast data structure operations and dynamic memory allocation. While <strong> <em>unions</em> </strong> allow numerous variables to share the same memory space, structures group relevant variables together.</p> <p> <strong> <em>Code</em> </strong> becomes more legible and maintainable when named constants are defined using enumeration data types. <strong> <em>Enumerations</em> </strong> give named constants integer values to enable the meaningful representation of related data. The void data type indicates the lack of a particular type. It is used as a return type for both <strong> <em>functions</em> </strong> and <strong> <em>function parameters</em> </strong> that don&apos;t take any arguments and don&apos;t return a value. The <strong> <em>void* pointer</em> </strong> also functions as a general pointer that can <strong> <em>store addresses</em> </strong> of various types.</p> <p>C programming requires a solid understanding of <strong> <em>data types</em> </strong> . Programmers can ensure adequate memory allocation, avoid <strong> <em>data overflow</em> </strong> or <strong> <em>truncation</em> </strong> , and enhance the readability and maintainability of their code by selecting the right <strong> <em>data type</em> </strong> . C programmers may create <strong> <em>effective, dependable</em> </strong> , and well-structured code that satisfies the requirements of their applications by having a firm understanding of data types.</p> <hr></5;>

показалец:

А показалец е производен тип данни, който следи адреса на паметта на друг тип данни. Когато показалец се декларира, на тип данни то се отнася до е заяви първо , а след това и име на променлива се предхожда от звездичка (*) .

Можете да имате неправилен достъп и да промените стойността на променлива с помощта на указатели, като посочите адреса на паметта на променливата. Указатели се използват често в задачи като указатели на функции, структури от данни , и динамично разпределение на паметта .

Ето пример за деклариране и използване на указател:

 #include int main() { int num = 42; // An integer variable int *ptr; // Declares a pointer to an integer ptr = # // Assigns the address of &apos;num&apos; to the pointer // Accessing the value of &apos;num&apos; using the pointer printf(&apos;Value of num: %d
&apos;, *ptr); return 0; } 

Изход:

 Value of num: 42 

Структура:

Структурата е производен тип данни, който позволява създаването на съставни типове данни, като позволява групирането на много типове данни под едно име. Той ви дава възможност да създавате свои собствени уникални структури от данни чрез сливане заедно на променливи от различни видове.

ред на случаен принцип в sql
  1. Членовете или полетата на дадена структура се използват за препратка към всяка променлива в нея.
  2. Всеки тип данни, включително различни структури, може да бъде член на структура.
  3. Членовете на структура могат да бъдат достъпни с помощта на оператора точка (.).

Тук се демонстрира декларация и използване на структура:

 #include #include // Define a structure representing a person struct Person { char name[50]; int age; float height; }; int main() { // Declare a variable of type struct Person struct Person person1; // Assign values to the structure members strcpy(person1.name, &apos;John Doe&apos;); person1.age = 30; person1.height = 1.8; // Accessing the structure members printf(&apos;Name: %s
&apos;, person1.name); printf(&apos;Age: %d
&apos;, person1.age); printf(&apos;Height: %.2f
&apos;, person1.height); return 0; } 

Изход:

 Name: John Doe Age: 30 Height: 1.80 

съюз:

Произведен тип данни, наречен a съюз ви позволява да съхранявате различни типове данни в един и същ адрес на паметта. За разлика от структурите, където всеки член има отделно пространство в паметта, всички членове на обединението споделят едно пространство в паметта. Стойност може да се държи само от един член на съюз във всеки даден момент. Когато трябва да представите много типове данни взаимозаменяемо, съюзите са полезни. Подобно на структурите, можете да получите достъп до членовете на съюз, като използвате точка (.) оператор.

Ето пример за деклариран и използван съюз:

 #include // Define a union representing a numeric value union NumericValue { int intValue; float floatValue; char stringValue[20]; }; int main() { // Declare a variable of type union NumericValue union NumericValue value; // Assign a value to the union value.intValue = 42; // Accessing the union members printf(&apos;Integer Value: %d
&apos;, value.intValue); // Assigning a different value to the union value.floatValue = 3.14; // Accessing the union members printf(&apos;Float Value: %.2f
&apos;, value.floatValue); return 0; } 

Изход:

 Integer Value: 42 Float Value: 3.14 

Тип данни за изброяване

Набор от именувани константи или преброители които представляват колекция от свързани стойности, могат да бъдат дефинирани в C с помощта на тип данни за изброяване (enum). Изброявания ви дават средствата да давате имена, които имат смисъл за група от интегрални стойности, което прави вашия код по-лесен за четене и поддръжка.

Ето пример как да дефинирате и използвате изброяване в C:

удебелен текст css
 #include // Define an enumeration for days of the week enum DaysOfWeek { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; int main() { // Declare a variable of type enum DaysOfWeek enum DaysOfWeek today; // Assign a value from the enumeration today = Wednesday; // Accessing the enumeration value printf(&apos;Today is %d
&apos;, today); return 0; } 

Изход:

 Today is 2 

Празен тип данни

The void тип данни в езика C се използва за обозначаване на липсата на определен тип. Типове връщани функции, параметри на функцията , и указатели са три ситуации, в които се използва често.

Тип връщане на функцията:

А празен тип връщане функцията не генерира стойност. А празна функция изпълнява задача или действие и завършва, вместо да връща стойност.

Пример:

 void printHello() { printf(&apos;Hello, world!
&apos;); } 

Функционални параметри:

The параметър void може да се използва за указване, че дадена функция не приема аргументи.

Пример:

 void processInput(void) { /* Function logic */ } 

Указатели:

Всеки адрес може да бъде съхранен в указател от тип празнота* , което го прави универсален указател. Той предлага метод за работа с указатели към двусмислени или нетипични типове.

Пример:

 void* dataPtr; 

The void тип данни е полезно за дефиниране на функции, които не приемат никакви аргументи, когато работите с общи указатели или когато искате да сигнализирате, че дадена функция не връща стойност. Важно е да се отбележи, че докато празнота* може да се използва за изграждане на общи указатели, самият void не може да бъде деклариран като тип променлива.

Ето примерен код, който показва как да използвате void в различни ситуации:

 #include // Function with void return type void printHello() { printf(&apos;Hello, world!
&apos;); } // Function with void parameter void processInput(void) { printf(&apos;Processing input...
&apos;); } int main() { // Calling a void function printHello(); // Calling a function with void parameter processInput(); // Using a void pointer int number = 10; void* dataPtr = &amp;number; printf(&apos;Value of number: %d
&apos;, *(int*)dataPtr); return 0; } 

Изход:

 Hello, world! Processing input... Value of number: 10 

Заключение:

Като резултат, типове данни са от съществено значение в езика за програмиране C, защото те определят видовете информация, която променливите могат да съдържат. Те предоставят размера и формата на данните, позволявайки на компилатора да разпредели памет и да извърши необходимите действия. Типовете данни, поддържани от C, включват празнота, изброяване, получено , и основни типове . В допълнение към типовете с плаваща запетая като плавам и двойно , основните типове данни в C също включват базирани на цели числа видове като int, char , и къс . Тези форми могат да бъдат подписан или неподписан , и те варират по размер и обхват. За да създадете надежден и ефективен код, е изключително важно да разберете размера на паметта и обхвата на тези типове.

карти java

Няколко примера за производни типове данни са съюзи, указатели, структури , и масиви . Множество елементи от един и същи вид могат да се съхраняват заедно в непрекъсната памет поради масиви. Указатели следете адресите на паметта, което позволява бързи операции на структурата на данните и динамично разпределение на паметта. Докато съюзи позволяват на множество променливи да споделят едно и също пространство в паметта, структурите групират съответните променливи заедно.

Код става по-четлив и поддържаем, когато наименуваните константи се дефинират с помощта на типове данни за изброяване. Изброявания дайте целочислени стойности на именувани константи, за да позволите смисленото представяне на свързаните данни. Празният тип данни показва липсата на определен тип. Използва се като тип връщане и за двете функции и функционални параметри които не приемат никакви аргументи и не връщат стойност. The void * показалец също функционира като общ указател, който може адреси на магазини от различни видове.

Програмирането на C изисква солидно разбиране на типове данни . Програмистите могат да осигурят адекватно разпределение на паметта, избягвайте препълване на данни или съкращаване , и да подобрят четливостта и поддръжката на техния код, като изберат правилния тип данни . C програмистите могат да създават ефективен, надежден , и добре структуриран код, който отговаря на изискванията на техните приложения чрез твърдо разбиране на типовете данни.