C - Types de données

Les types de données en c font référence à un système étendu utilisé pour déclarer des variables ou des fonctions de différents types. Le type d'une variable détermine l'espace qu'elle occupe dans le stockage et la manière dont le modèle de bits stocké est interprété.

Les types en C peuvent être classés comme suit -

N ° Sr. Types et description
1

Basic Types

Ce sont des types arithmétiques et sont ensuite classés en: (a) types entiers et (b) types à virgule flottante.

2

Enumerated types

Ce sont à nouveau des types arithmétiques et ils sont utilisés pour définir des variables qui ne peuvent affecter que certaines valeurs entières discrètes dans tout le programme.

3

The type void

Le spécificateur de type void indique qu'aucune valeur n'est disponible.

4

Derived types

Ils comprennent (a) les types de pointeurs, (b) les types de tableaux, (c) les types de structure, (d) les types d'union et (e) les types de fonctions.

Les types de tableau et les types de structure sont appelés collectivement les types d'agrégat. Le type d'une fonction spécifie le type de la valeur de retour de la fonction. Nous verrons les types de base dans la section suivante, où d'autres types seront traités dans les chapitres à venir.

Types entiers

Le tableau suivant fournit les détails des types d'entiers standard avec leurs tailles de stockage et leurs plages de valeurs -

Type Taille de stockage Plage de valeurs
carboniser 1 octet -128 à 127 ou 0 à 255
caractère non signé 1 octet 0 à 255
char signé 1 octet -128 à 127
int 2 ou 4 octets -32.768 à 32.767 ou -2.147.483.648 à 2.147.483.647
entier non signé 2 ou 4 octets 0 à 65535 ou 0 à 4 294 967 295
court 2 octets -32 768 à 32 767
court non signé 2 octets 0 à 65 535
longue 8 octets ou (4 octets pour OS 32 bits) -9223372036854775808 à 9223372036854775807
non signé longtemps 8 octets 0 à 18446744073709551615

Pour obtenir la taille exacte d'un type ou d'une variable sur une plateforme particulière, vous pouvez utiliser le sizeofopérateur. L'expression sizeof (type) donne la taille de stockage de l'objet ou du type en octets. Ci-dessous, un exemple pour obtenir la taille de différents types sur une machine en utilisant différentes constantes définies dans le fichier d'en-tête limits.h

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>

int main(int argc, char** argv) {

    printf("CHAR_BIT    :   %d\n", CHAR_BIT);
    printf("CHAR_MAX    :   %d\n", CHAR_MAX);
    printf("CHAR_MIN    :   %d\n", CHAR_MIN);
    printf("INT_MAX     :   %d\n", INT_MAX);
    printf("INT_MIN     :   %d\n", INT_MIN);
    printf("LONG_MAX    :   %ld\n", (long) LONG_MAX);
    printf("LONG_MIN    :   %ld\n", (long) LONG_MIN);
    printf("SCHAR_MAX   :   %d\n", SCHAR_MAX);
    printf("SCHAR_MIN   :   %d\n", SCHAR_MIN);
    printf("SHRT_MAX    :   %d\n", SHRT_MAX);
    printf("SHRT_MIN    :   %d\n", SHRT_MIN);
    printf("UCHAR_MAX   :   %d\n", UCHAR_MAX);
    printf("UINT_MAX    :   %u\n", (unsigned int) UINT_MAX);
    printf("ULONG_MAX   :   %lu\n", (unsigned long) ULONG_MAX);
    printf("USHRT_MAX   :   %d\n", (unsigned short) USHRT_MAX);

    return 0;
}

Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant sous Linux -

CHAR_BIT    :   8
CHAR_MAX    :   127
CHAR_MIN    :   -128
INT_MAX     :   2147483647
INT_MIN     :   -2147483648
LONG_MAX    :   9223372036854775807
LONG_MIN    :   -9223372036854775808
SCHAR_MAX   :   127
SCHAR_MIN   :   -128
SHRT_MAX    :   32767
SHRT_MIN    :   -32768
UCHAR_MAX   :   255
UINT_MAX    :   4294967295
ULONG_MAX   :   18446744073709551615
USHRT_MAX   :   65535

Types à virgule flottante

Le tableau suivant fournit les détails des types à virgule flottante standard avec les tailles de stockage et les plages de valeurs et leur précision -

Type Taille de stockage Plage de valeurs Précision
flotte 4 octets 1,2E-38 à 3,4E + 38 6 décimales
double 8 octets 2,3E-308 à 1,7E + 308 15 décimales
long double 10 octets 3.4E-4932 à 1.1E + 4932 19 décimales

Le fichier d'en-tête float.h définit des macros qui vous permettent d'utiliser ces valeurs et d'autres détails sur la représentation binaire des nombres réels dans vos programmes. L'exemple suivant imprime l'espace de stockage occupé par un type float et ses valeurs de plage -

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>

int main(int argc, char** argv) {

    printf("Storage size for float : %d \n", sizeof(float));
    printf("FLT_MAX     :   %g\n", (float) FLT_MAX);
    printf("FLT_MIN     :   %g\n", (float) FLT_MIN);
    printf("-FLT_MAX    :   %g\n", (float) -FLT_MAX);
    printf("-FLT_MIN    :   %g\n", (float) -FLT_MIN);
    printf("DBL_MAX     :   %g\n", (double) DBL_MAX);
    printf("DBL_MIN     :   %g\n", (double) DBL_MIN);
    printf("-DBL_MAX     :  %g\n", (double) -DBL_MAX);
    printf("Precision value: %d\n", FLT_DIG );

    return 0;
}

Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant sous Linux -

Storage size for float : 4 
FLT_MAX      :   3.40282e+38
FLT_MIN      :   1.17549e-38
-FLT_MAX     :   -3.40282e+38
-FLT_MIN     :   -1.17549e-38
DBL_MAX      :   1.79769e+308
DBL_MIN      :   2.22507e-308
-DBL_MAX     :  -1.79769e+308
Precision value: 6

Le type de vide

Le type void spécifie qu'aucune valeur n'est disponible. Il est utilisé dans trois types de situations -

N ° Sr. Types et description
1

Function returns as void

Il existe diverses fonctions en C qui ne renvoient aucune valeur ou vous pouvez dire qu'elles renvoient void. Une fonction sans valeur de retour a le type de retour comme void. Par exemple,void exit (int status);

2

Function arguments as void

Il existe différentes fonctions en C qui n'acceptent aucun paramètre. Une fonction sans paramètre peut accepter un vide. Par exemple,int rand(void);

3

Pointers to void

Un pointeur de type void * représente l'adresse d'un objet, mais pas son type. Par exemple, une fonction d'allocation de mémoirevoid *malloc( size_t size ); renvoie un pointeur vers void qui peut être converti en n'importe quel type de données.