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!
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
eint
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:
-
Funzione che non restituisce nulla:
void sayHello() { printf("Hello, World!\n"); }
-
Funzione che non accetta parametri:
int getRandomNumber(void) { return 4; // scelto con un tiro di dado equo. garantito essere casuale. }
-
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