Tipi di dati in "C". Programmazione C

07/03/2020

Tipi di dati in C, una classe di dati i cui valori hanno caratteristiche simili. Il tipo definisce la rappresentazione interna dei dati in memoria. I tipi di dati più elementari sono booleani, interi, virgola mobile, stringa, puntatori.

dattilografia

Con la digitazione dinamica, la variabile è associata al tipo al momento dell'inizializzazione. Risulta che una variabile in diverse parti del codice può avere diversi tipi. Supporto per la digitazione dinamica Script Java Python, Ruby, PHP.

La tipizzazione statica è l'opposto della dinamica. Alla dichiarazione, la variabile riceve un tipo che non cambia ulteriormente. I linguaggi C e C ++ sono esattamente così. Questo metodo è il più conveniente per scrivere codice complesso e molti errori vengono eliminati in fase di compilazione.

Tipi di dati

Le lingue sono suddivise informalmente in caratteri fortemente tipizzati e debolmente tipizzati. Una forte digitazione implica che il compilatore genererà un errore se i tipi previsti e quelli reali non corrispondono.

x = 1 + "2"; // errore: non è possibile aggiungere un carattere al numero

Un esempio di digitazione debole.

x = 1 + "2"; // 3

I controlli di omologazione sono eseguiti dal sistema di sicurezza del tipo. Si verifica un errore di battitura, ad esempio, quando si tenta di utilizzare un numero come funzione. Esistono lingue non tipizzate. Al contrario di quelli tipizzati, consentono di eseguire qualsiasi operazione su ciascun oggetto.

Classi di memoria

Le variabili, indipendentemente dal loro tipo, hanno la loro portata e il loro tempo di esistenza.

Codice C

Classi di memoria:

  • auto;
  • statica;
  • extern;
  • registrarsi.

Tutte le variabili nel linguaggio C sono locali per impostazione predefinita. Possono essere utilizzati solo all'interno di una funzione o blocco. Al completamento della funzione, il loro valore viene distrutto.

Una variabile statica è anche locale, ma al di fuori del blocco può avere un valore diverso e tra le chiamate di funzione il valore viene mantenuto.

La variabile esterna è globale. È disponibile in qualsiasi parte del codice e anche in un altro file.

La variabile di registro raccomanda che il compilatore memorizzi il valore nella RAM.

In questi casi non è possibile indicare gli identificatori del tipo di dati in C:

  1. Tutte le variabili all'interno del blocco non sono variabili, rispettivamente, se si assume l'uso di questa particolare classe di memoria, l'identificatore automatico non viene specificato.
  2. Tutte le funzioni dichiarate al di fuori del blocco o della funzione sono globali per impostazione predefinita, quindi lo specificatore esterno è facoltativo.

Tipi di base

Per specificare i tipi semplici, specificare i qualificatori int, char, float o double. Le variabili possono essere modificatori senza segno (senza segno), firmati (firmati), corti, lunghi, lunghi.

Tipi di base

Per impostazione predefinita, tutti i numeri sono firmati, rispettivamente, possono essere nell'intervallo di soli numeri positivi. Per definire una variabile di tipo char come firmata, viene scritto un char firmato. Long, long long e short indicano quanto spazio di memoria è allocato per la memorizzazione. Il più grande è lungo, il più piccolo è corto.

Char è il tipo di dati più piccolo in C. Solo 1 byte di memoria è allocato per la memorizzazione dei valori. Le variabili di tipo di carattere vengono in genere assegnate ai caratteri, meno spesso - numeri. I valori dei caratteri sono citati.

char a = "a";

char b = 2;

Il tipo int memorizza numeri interi, la sua dimensione non è definita - richiede fino a 4 byte di memoria, a seconda dell'architettura del computer.

int a = 12;

La conversione esplicita di una variabile unsigned è data come:

unsigned int a = 12;

Aspetto implicito come questo:

int a = 12u;

Fluttua e raddoppia i numeri con un punto. I numeri float sono rappresentati come -2.3 o 3.34. Il doppio viene utilizzato per una maggiore precisione: dopo il separatore decimale vengono indicate più cifre. Questo tipo occupa più spazio di memoria rispetto al float.

doppio a = 12,4567;

Void è nullo. Definisce funzioni che non restituiscono nulla. Con questo qualificatore, un valore vuoto viene specificato negli argomenti dei metodi. I puntatori che possono prendere qualsiasi tipo di dati sono anche definiti come nulli.

Tipo booleano booleano

Utilizzato in controlli condizionali e cicli. Ha solo due significati:

  • la verità;
  • una bugia
Vera bugia

I valori booleani possono essere convertiti in un valore int. True è equivalente a uno, falso a zero. La conversione di tipo viene fornita solo tra bool e int, altrimenti il ​​compilatore genererà un errore.

int x = 123;

if (x) {// Errore: "Impossibile convertire implicitamente il tipo 'int' in 'bool'"

};

if (x! = 0) // Il modo C #

{

}

Archi e matrici

Gli array sono tipi complessi dati in C. Il PL non funziona con le stringhe allo stesso modo di Javascript o Ruby. In C, tutte le stringhe sono matrici di elementi di un valore di carattere. Le stringhe terminano con un byte zero "".

Cosa sono gli array

Dichiarazione di stringa in C: char b [] = {'s', 't', 'r', 'i', 'n', 'g', ''};

La stringa è anche dichiarata in forma sintetica.

char a [] = "stringa";

a [1] === b [1]; // 't'

Gli array di numeri interi o di caratteri sono dichiarati nello stesso modo: nome della variabile del tipo di dati [dimensione dell'array].

int a [100];

char b [5];

Sintassi simile indica che la dimensione del valore int non può essere maggiore di 100 caratteri. Quando si crea una matrice, un numero di celle è riservato nella memoria per la memorizzazione di elementi. Pertanto, per l'elaborazione di matrici di dati con una dimensionalità sconosciuta o modificabile, la memoria viene allocata dinamicamente.

Gli array multidimensionali sono dichiarati in questo modo:

int a [2] [3];

Quando si crea questo array, lo spazio viene allocato, in questo caso, per la memorizzazione di due array annidati, composti da tre elementi.

Inizializzazione di un array multidimensionale:

int a [2] [3] = {1, 2, 3, 4, 5, 6};

a [1]; // [1, 2, 3]

a [2]; // [4, 5, 6]

Link e puntatori

Puntatori - la caratteristica principale della lingua, aprono opportunità per lavorare con la memoria. Trasmettono informazioni sulla posizione di un'altra variabile in memoria. Prima dell'uso, come altre variabili, vengono dichiarati sotto forma di puntatore di tipo *. Tipo è un tipo di variabile, il puntatore è un nome di puntatore.

Tipi di puntatori

Per impostare il puntatore sul valore di un'altra variabile, vengono utilizzati i collegamenti. Passano l'indirizzo di una variabile e vengono utilizzati come puntatori sicuri.

int a = 2;

puntatore int *;

pointer = & a;

I collegamenti ti consentono di lavorare con il puntatore come con l'oggetto.

Collegamenti in C

In questo caso, & a restituirà 0x7340cad2a25c, * pointer - 2, ma il puntatore senza "*" restituirà 0x7340cad2a25c.

Cambiando il valore, non cambiamo il suo indirizzo, quindi il puntatore si riferirà anche a 0x7340cad2a25c, ma cambierà il suo valore.

Un puntatore a un altro puntatore viene dichiarato nel modulo:

int w = 100;

int * x = & w;

int ** z = & x;

Un puntatore a un array funziona in un modo leggermente diverso.

int c [5] = [1, 2, 3, 4, 5], * a;

Abbiamo dichiarato una matrice di numeri interi e un puntatore int a.

In questo caso, il puntatore non punta alla matrice stessa, ma solo al suo primo elemento. Così,

a = c;

e

a = & c [0]; // 1

equivalenti tra loro.

Ora puoi fare riferimento al terzo elemento dell'array usando l'espressione

* (a + 3)

o

a [3];

Nell'esempio sopra, puoi vedere che l'aggiunta del puntatore funziona in un modo diverso. Varie operazioni aritmetiche possono essere applicate a loro.

Un puntatore a un array è specificato come segue:

char (* pa) [10];

Ma la serie di puntatori assomiglia a questo:

char * pc [10];

struttura

Structure è un tipo di dati in C che facilita la scrittura e la comprensione dei programmi, aiuta a raggruppare i dati.

Strutture in C

Una struttura come una matrice rappresenta una raccolta di dati, ma i suoi elementi possono essere di un tipo diverso, e il riferimento è fatto per nome, non per indice.

{

type1 nome_variabile1;

type1 nome_variabile1;

// altri membri di dati;

}

Una variabile strutturale viene dichiarata dopo aver chiuso le parentesi graffe.

struct book

{

titolo di carattere [20];

char autor [30];

doppio cast;

} book1, book2, * ptr_bk;

L'accesso ai campi è fornito con l'operatore ".". Per accedere al titolo della variabile, scriviamo:

book1.title;

Quindi, inizializziamo la variabile

book1.title = "String";

Per fare riferimento ai puntatori utilizzare l'operatore "->".

ptr_bk-> cast;

o operatore ".".

(* (ptr_bk)). cast;

Il secondo tipo di liste con questo è enum (enumerazione). Contiene variabili intere.

enum {rosso, blu, verde};

L'esempio dichiara un enumerazione anonima contenente tre membri rosso, blu, verde. Prima di accedere agli elementi, viene dichiarata una variabile enumerata.

enum name1 {red, blue, red} varname;

In questo caso, nome1 è il nome dell'enumerazione e varname è il nome della variabile. Nel momento di creare la struttura, puoi impostare diverse variabili. Sono separati da virgole.

enum name1 {red, blue, red} varname1, varname2, varname3;

L'accesso ai membri dell'enumerazione è specificato utilizzando l'operatore ".".

varname.red = "red";

conclusione

Il linguaggio C offre un ampio set di tipi. Sono formati usando qualificatori appropriati.

I tipi base sono divisi in numerici (double, float) e signed (int, char). I modificatori firmati e non firmati indicano la presenza di un carattere davanti al simbolo. I modificatori corti e lunghi sono responsabili della dimensione delle celle nella memoria per la memorizzazione dei valori delle variabili. Il tipo di dati logici ha due valori: true e false. Array, le strutture si riferiscono a tipi di dati complessi. Il puntatore funziona con l'indirizzo della variabile a cui punta.