Tipi di dati in C

Ciao a tutti, futuri programmatori! Benvenuti nel nostro emozionante viaggio nel mondo della programmazione C. Oggi esploreremo il fascinante regno dei tipi di dati in C. Non preoccupatevi se siete nuovi alla programmazione; sarò il vostro guida amichevole, e affronteremo questo argomento passo per passo. Allora, prendete la vostra bevanda preferita, fatevi comodi, e tuffiamoci!

C - Data Types

Tipi di dati interi in C

Iniziamo con qualcosa con cui siamo tutti familiari - i numeri interi. In C, li chiamiamo interi, e vengono in diverse dimensioni e varianti.

I tipi di dati interi di base

Ecco una tabella dei tipi di dati interi più comuni in C:

Tipo di dati Dimensione (byte) Intervallo
char 1 -128 a 127 o 0 a 255
short 2 -32,768 a 32,767
int 4 -2,147,483,648 a 2,147,483,647
long 4 o 8 -2,147,483,648 a 2,147,483,647 o -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807

Ora, vediamo questi in azione:

#include <stdio.h>

int main() {
char my_char = 65;
short my_short = 32000;
int my_int = 2000000000;
long my_long = 9000000000L;

printf("char: %c\n", my_char);
printf("short: %d\n", my_short);
printf("int: %d\n", my_int);
printf("long: %ld\n", my_long);

return 0;
}

Quando eseguite questo codice, vedrete:

char: A
short: 32000
int: 2000000000
long: 9000000000

Ecco una spiegazione:

  • Il valore char 65 corrisponde a 'A' nella tabella ASCII. Sorpresa! char può anche memorizzare numeri!
  • short e int funzionano come previsto per numeri di dimensioni medie.
  • Per long, aggiungiamo una 'L' alla fine per indicare a C che è un numero lungo.

Interi senza segno

A volte, abbiamo bisogno solo di numeri positivi. Ecco dove entrano in gioco gli interi senza segno:

unsigned char my_uchar = 255;
unsigned short my_ushort = 65000;
unsigned int my_uint = 4000000000U;

printf("unsigned char: %u\n", my_uchar);
printf("unsigned short: %u\n", my_ushort);
printf("unsigned int: %u\n", my_uint);

Output:

unsigned char: 255
unsigned short: 65000
unsigned int: 4000000000

Utilizzando unsigned, possiamo memorizzare numeri positivi più grandi nella stessa quantità di memoria. È come magia, ma è solo un uso intelligente dei bit!

Tipi di dati a virgola mobile in C

Ora, immergiamoci nel mondo dei numeri decimali. C fornisce tre tipi di dati a virgola mobile:

Tipo di dati Dimensione (byte) Precisione
float 4 6-7 cifre decimali
double 8 15-16 cifre decimali
long double 16 19-20 cifre decimali

Vediamo come funzionano:

#include <stdio.h>

int main() {
float pi_float = 3.14159265358979323846f;
double pi_double = 3.14159265358979323846;
long double pi_long_double = 3.14159265358979323846L;

printf("float: %.7f\n", pi_float);
printf("double: %.16f\n", pi_double);
printf("long double: %.20Lf\n", pi_long_double);

return 0;
}

Output:

float: 3.1415927
double: 3.1415926535897931
long double: 3.14159265358979323846

Notate come float perde la precisione dopo 7 cifre, mentre double e long double mantengono più accuratezza. È come zoomare su una foto digitale - a un certo punto, iniziate a vedere i pixel!

Tipi di dati definiti dall'utente in C

C ci permette di creare i nostri own tipi di dati. È come essere un cuoco e creare le nostre ricette!

Strutture

Le strutture ci permettono di raggruppare insieme dati correlati:

#include <stdio.h>
#include <string.h>

struct Student {
char name[50];
int age;
float gpa;
};

int main() {
struct Student alice;
strcpy(alice.name, "Alice");
alice.age = 20;
alice.gpa = 3.8;

printf("Name: %s\n", alice.name);
printf("Age: %d\n", alice.age);
printf("GPA: %.1f\n", alice.gpa);

return 0;
}

Output:

Name: Alice
Age: 20
GPA: 3.8

Qui, abbiamo creato un tipo Student che raggruppa un nome, un'età e un GPA insieme. È come creare un modulo per le informazioni degli studenti!

Enumerazioni

Le enumerazioni sono fantastiche per creare un set di costanti con nomi:

#include <stdio.h>

enum Days {SUN, MON, TUE, WED, THU, FRI, SAT};

int main() {
enum Days today = WED;
printf("Today is day number %d\n", today);
return 0;
}

Output:

Today is day number 3

Le enumerazioni assegnano automaticamente valori interi crescenti a partire da 0. È come dare soprannomi ai numeri!

Il tipo di dati void in C

void è un tipo speciale in C. È come una tela bianca - rappresenta l'assenza di dati. Lo utilizziamo principalmente in tre scenari:

  1. Funzione che non restituisce nulla:

    void sayHello() {
    printf("Hello, World!\n");
    }
  2. Funzione che non accetta parametri:

    int getRandomNumber(void) {
    return 4;  // scelto con un tiro di dado equo. garantito essere casuale.
    }
  3. Puntatori generici (ne parleremo nella sezione dei puntatori)

Tipo di dati array in C

Gli array sono come una fila di buchi per colombi, ciascuno contenente un valore dello stesso tipo:

#include <stdio.h>

int main() {
int scores[5] = {85, 92, 78, 90, 88};

printf("First score: %d\n", scores[0]);
printf("Last score: %d\n", scores[4]);

float average = 0;
for(int i = 0; i < 5; i++) {
average += scores[i];
}
average /= 5;

printf("Average score: %.2f\n", average);

return 0;
}

Output:

First score: 85
Last score: 88
Average score: 86.60

Ricordate, in C, gli indici degli array iniziano da 0. È come i numeri dei piani in Europa - il piano terra è 0!

Tipo di dati puntatore in C

I puntatori sono come cartelli che indicano luoghi nella memoria. Sono potenti ma possono essere complicati:

#include <stdio.h>

int main() {
int x = 10;
int *p = &x;

printf("Value of x: %d\n", x);
printf("Address of x: %p\n", (void*)&x);
printf("Value of p: %p\n", (void*)p);
printf("Value pointed by p: %d\n", *p);

*p = 20;
printf("New value of x: %d\n", x);

return 0;
}

Output (gli indirizzi varieranno):

Value of x: 10
Address of x: 0x7ffd5e8e3964
Value of p: 0x7ffd5e8e3964
Value pointed by p: 10
New value of x: 20

Qui, p è un puntatore che memorizza l'indirizzo di x. Possiamo utilizzare *p per accedere o modificare il valore all'indirizzo. È come avere un telecomando per x!

Ecco fatto! Abbiamo coperto i principali tipi di dati in C. Ricordate, comprendere i tipi di dati è fondamentale perché vi aiuta a gestire la memoria in modo efficiente e a evitare bug. Continuate a esercitarvi, e presto mesticherete questi tipi come un professionista! Buon codice!

Credits: Image by storyset