logo

Datové typy v C

Datový typ určuje typ dat, která může proměnná ukládat, například celé číslo, plovoucí číslo, znak atd.

C datové typy

V jazyce C existují následující datové typy.

TypyTypy dat
Základní datový typint, char, float, double
Odvozený datový typpole, ukazatel, struktura, sjednocení
Typ dat výčtuenum
Neplatný datový typprázdnota

Základní datové typy

Základní datové typy jsou celočíselné a s pohyblivou řádovou čárkou. Jazyk C podporuje podepsané i nepodepsané literály.

Velikost paměti základních datových typů se může měnit podle 32 nebo 64bitového operačního systému.

výběr z více tabulek v sql

Podívejme se na základní datové typy. Jeho velikost je dána podle 32bitové architektury .

Typy datVelikost pamětiRozsah
char 1 bajt−128 až 127
podepsaný char1 bajt−128 až 127
nepodepsaný char1 bajt0 až 255
krátký 2 bajty−32 768 až 32 767
podepsáno krátce2 bajty−32 768 až 32 767
nepodepsaný krátký2 bajty0 až 65 535
int 2 bajty−32 768 až 32 767
podepsané int2 bajty−32 768 až 32 767
nepodepsaný int2 bajty0 až 65 535
krátký int 2 bajty−32 768 až 32 767
podepsané krátké int2 bajty−32 768 až 32 767
unsigned short int2 bajty0 až 65 535
dlouhá int 4 bajty-2 147 483 648 až 2 147 483 647
podepsáno dlouhé int4 bajty-2 147 483 648 až 2 147 483 647
unsigned long int4 bajty0 až 4,294,967,295
plovák 4 bajty
dvojnásobek 8 bajtů
dlouhý dvojitý 10 bajtů

Int:

Celá čísla jsou celá čísla bez zlomků nebo desetinných částí a datový typ int se používá k jejich reprezentaci.

Často se používá pro proměnné, které zahrnují hodnoty , jako počty, indexy , nebo jiná číselná čísla. The datový typ int může představovat obojí pozitivní a záporná čísla protože je standardně podepsán.

An int zabírá 4 byty paměti na většině zařízení, což umožňuje ukládat hodnoty mezi přibližně -2 miliardami a +2 miliardami.

Char:

Jednotlivé znaky jsou reprezentovány datový typ char . Obvykle se používá k držení ASCII nebo Znaky schématu kódování UTF-8 , jako písmena, číslice, symboly nebo čárky . Existují 256 znaků který může být reprezentován jedním znakem, který zabírá jeden bajt paměti. Postavy jako např 'A', 'b', '5', nebo '$' jsou uzavřeny v jednoduchých uvozovkách.

Plovák:

Chcete-li reprezentovat celá čísla, použijte plovoucí datový typ . Plovoucí čísla lze použít k vyjádření zlomkových jednotek nebo čísel s desetinnými místy.

The plovoucí typ se obvykle používá pro proměnné, které vyžadují velmi dobrou přesnost, ale nemusí být příliš přesné. Dokáže ukládat hodnoty s přesností asi 6 desetinných míst a rozsah asi 3,4 x 1038 v 4 byty paměti.

Dvojnásobek:

K reprezentaci použijte dva datové typy dvě plovoucí celá čísla . Když je potřeba další přesnost, například ve vědeckých výpočtech nebo finančních aplikacích, poskytuje větší přesnost než plovoucí.

Dvojitý typ , který využívá 8 bajtů paměti a má přesnost asi 15 desetinných míst, dává větší hodnoty . C ve výchozím nastavení zachází s čísly s pohyblivou řádovou čárkou jako s dvojnásobky, pokud není zadán žádný explicitní typ.

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

Ve výše uvedeném příkladu deklarujeme čtyři proměnné: an proměnná int pro věk osoby, a proměnná char pro známku studenta, a float proměnná pro odečet teploty a dvě proměnné pro číslo pí.

Odvozený datový typ

Kromě základních datových typů podporuje také C odvozené datové typy, počítaje v to pole, ukazatele, struktury, a odbory . Tyto datové typy dávají programátorům možnost zpracovávat heterogenní data, přímo modifikovat paměť a vytvářet složité datové struktury.

Pole:

An pole, odvozený datový typ , umožňuje uložit sekvenci prvky pevné velikosti stejného typu. Poskytuje mechanismus pro spojení více cílů se stejnými daty pod stejným názvem.

long to int java

Index se používá pro přístup k prvkům pole s a 0 index pro první vstup. Velikost pole je pevná v době deklarace a nelze ji během provádění programu změnit. Komponenty pole jsou umístěny v sousedních paměťových oblastech.

Zde je příklad deklarace a použití pole:

 #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;>

Ukazatel:

A ukazatel je odvozený datový typ, který sleduje paměťovou adresu jiného datového typu. Když ukazatel je prohlášeno, datový typ odkazuje na je uvedeno jako první a poté název proměnné předchází hvězdička (*) .

Můžete mít nesprávný přístup a změnit hodnotu proměnné pomocí ukazatelů zadáním adresy paměti proměnné. Ukazatele se běžně používají v úkoly jako ukazatele funkcí, datové struktury , a dynamická alokace paměti .

Zde je příklad deklarování a použití ukazatele:

 #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; } 

Výstup:

 Value of num: 42 

Struktura:

Struktura je odvozený datový typ, který umožňuje vytváření složených datových typů tím, že umožňuje seskupování mnoha datových typů pod jedním názvem. Dává vám možnost vytvářet své vlastní jedinečné datové struktury spojením proměnných různých druhů.

binární typy stromů
  1. Členové nebo pole struktury se používají k odkazování na každou proměnnou v ní.
  2. Členem struktury může být jakýkoli datový typ, včetně různých struktur.
  3. Ke členům struktury lze přistupovat pomocí operátoru tečka (.).

Deklarace a použití struktury je demonstrováno zde:

 #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; } 

Výstup:

 Name: John Doe Age: 30 Height: 1.80 

Svaz:

Odvozený datový typ s názvem a svaz umožňuje uložit různé typy dat na stejnou adresu paměti. Na rozdíl od struktur, kde má každý člen samostatný paměťový prostor, sdílejí všichni členové svazu jeden paměťový prostor. Hodnotu může v daný okamžik držet pouze jeden člen odboru. Když potřebujete zaměnitelně reprezentovat mnoho datových typů, sjednocení se hodí. Stejně jako struktury můžete přistupovat ke členům odboru pomocí tečka (.) operátor.

Zde je příklad deklarace a použití sjednocení:

 #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; } 

Výstup:

tiskové pole v Javě
 Integer Value: 42 Float Value: 3.14 

Typ dat výčtu

Množina pojmenovaných konstant resp sčítači které představují kolekci spojených hodnot lze definovat v C pomocí datový typ výčtu (enum). Výčty vám umožní dát skupině integrálních hodnot názvy, které dávají smysl, což usnadňuje čtení a údržbu vašeho kódu.

Zde je příklad, jak definovat a používat výčet v C:

 #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; } 

Výstup:

 Today is 2 

Neplatný datový typ

The neplatný datový typ v jazyce C se používá k označení nedostatku určitého typu. Typy návratů funkcí, parametry funkcí , a ukazatele jsou tři situace, kdy je často využíván.

Typ návratu funkce:

A neplatný návratový typ funkce nevytváří hodnotu. A neplatná funkce provede úlohu nebo akci a skončí, místo aby vrátil hodnotu.

Příklad:

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

Funkční parametry:

The parametr neplatný lze použít k označení, že funkce nepřijímá žádné argumenty.

Příklad:

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

Ukazatele:

Jakákoli adresa může být uložena v ukazateli typu prázdno* , což z něj dělá univerzální ukazatel. Nabízí metodu pro práci s ukazateli na nejednoznačné či atypické typy.

Příklad:

java bubble sort
 void* dataPtr; 

The neplatný datový typ je užitečný pro definování funkcí, které nepřijímají žádné argumenty při práci s obecnými ukazateli nebo když chcete signalizovat, že funkce nevrací hodnotu. Je důležité poznamenat, že zatímco prázdno* lze použít k vytvoření obecných ukazatelů, samotný void nelze deklarovat jako typ proměnné.

Zde je ukázka kódu, který ukazuje, jak využít void v různých situacích:

 #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; } 

Výstup:

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

Závěr:

Jako výsledek, typy dat jsou v programovacím jazyce C zásadní, protože definují druhy informací, které mohou proměnné obsahovat. Poskytují velikost a formát dat a umožňují kompilátoru přidělit paměť a provádět potřebné akce. Datové typy podporované C zahrnují prázdnota, výčet, odvozený , a základní typy . Kromě typů s plovoucí desetinnou čárkou jako plovák a dvojnásobek , základní datové typy v C také zahrnují celočíselné typy jako int, char , a krátký . Tyto formy mohou být podepsaný nebo nepodepsaný a jejich velikost a rozsah kolísají. Pro vytvoření spolehlivého a efektivního kódu je zásadní pochopit velikost paměti a rozsah těchto typů.

Několik příkladů odvozené datové typy jsou odbory, ukazatele, struktury , a pole . Více prvků stejného druhu může být uloženo společně v souvislé paměti díky polím. Ukazatele sledovat adresy paměti, což umožňuje rychlé operace s datovou strukturou a dynamické přidělování paměti. Zatímco odbory umožňují mnoha proměnným sdílet stejný paměťový prostor, struktury seskupují relevantní proměnné dohromady.

Kód se stává čitelnějším a lépe udržovatelným, když jsou pojmenované konstanty definovány pomocí datových typů výčtu. Výčty dejte pojmenovaným konstantám celočíselné hodnoty, abyste umožnili smysluplnou reprezentaci souvisejících dat. Datový typ void označuje nedostatek určitého typu. Používá se jako návratový typ pro oba funkcí a funkční parametry které neberou žádné argumenty a nevrací hodnotu. The void* ukazatel funguje také jako obecný ukazatel, který může adresy prodejen různých typů.

Programování v C vyžaduje důkladné pochopení typy dat . Programátoři mohou zajistit adekvátní alokaci paměti, vyhnout se přetečení dat nebo zkrácení a zlepšit čitelnost a udržovatelnost jejich kódu výběrem správného datový typ . C programátoři mohou vytvářet efektivní, spolehlivý a dobře strukturovaný kód, který splňuje požadavky jejich aplikací tím, že dobře rozumí datovým typům.