ARRAY DI STRUCT
1) DICHIARAZIONE DI UN TIPO TInfo
typedef struct {
char targa[8];
bool attiva;
} TInfo;
2) CREAZIONE DELL’ARRAY DI STRUCT attraverso la funzione “malloc”
La memoria può essere allocata dinamicamente, dobbiamo ricordarci che la funzione “malloc” restituisce un
puntatore di tipo void. Definiamo allora una variabile strutturata di tipo TInfo, per esempio TInfo TARGA.
TInfo *p=(TInfo*)(malloc(sizeof(TInfo)*dim) dove dim è al dimensione fisica dell’array di struct.
Il puntatore segna l’indirizzo di memoria del primo byte allocato, perciò a partire da esso possiamo accedere
a tutto il resto dei byte, quindi delle posizioni del vettore allocato. Possiamo allora scrivere p[i].
“L’operatore di indicizzazione [ ] permette di accedere agli elementi dell'array a cui il puntatore fa
riferimento”
3) ASSEGNAZIONE DEI VALORI AI CAMPI DELLE STRUCT
p[3].targa=ad000cd accesso al campo targa dell’elemento 3 dell’array
p[3].attiva=true accesso al campo attiva dell’elemento 3 dell’array
ARRAY DI STRINGHE
1) COSA SONO LE STRINGHE – sequenza di caratteri immagazzinati in una regione di
memoria contigua, la fine viene segnata dal byte nullo di terminazione \0.
2) CREAZIONE DELL’ARRAY Dichiarando un array di char usando la notazione [], creiamo un
array bidimensionale: la prima dimensione limita il numero di stringhe che si possono inserire
nell’array, la seconda dimensione limiterà la lunghezza massima della stringa.
3) ACCESSO AGLI ELEMENTI
v[i] singola stringa
v[i][j] singolo elemento di indice j appartenente alla stringa di indice i
ARRAY DI PUNTATORI
1) COSA SONO Gli array di puntatori in C sono strutture dati che contengono un insieme di puntatori. Ogni
elemento dell'array è un puntatore a un oggetto di un tipo specifico, come un int, un char, una struttura o
persino un altro puntatore. Gli array di puntatori sono utili in molte situazioni, in particolare quando si
desidera gestire un insieme di dati o oggetti, ciascuno dei quali può essere di dimensioni diverse o di tipi
diversi.
2) DICHIARAZIONE
int* Array[5]; // Dichiarazione di un array di puntatori a int con 5 elementi
char* strings[3]; // Dichiarazione di un array di puntatori a stringhe (array di caratteri)
3) ASSEGNAZIONE DEI PUNTATORI Puoi assegnare ai puntatori gli indirizzi di variabili o oggetti
appropriati.
int x = 10, y = 20, z = 30;
int* intArray[3] = {&x, &y, &z};
char str1[] = "Hello";
char str2[] = "World";
char* strings[2] = {str1, str2};
4) ACCESSO AI DATI ATTRAVERSO I PUNTATORI Puoi accedere ai dati referenziati dai puntatori
utilizzando l'operatore di dereferenziazione `*`.
printf("%d\n", *intArray[0]); // Stampa il valore referenziato dal primo puntatore
printf("%s\n", strings[1]); // Stampa la seconda stringa
ESEMPIO
#include <stdio.h>
main(){
int *a[20]; //dichiariamo un array di 20 elementi
int x;
x=8; //assegniamo il valore 8
a[5]=&x; //assegniamo l'indirizzo della variabile x
printf("%d\n", *a[5]); //visualizziamo il valore di x
return 0;
}
Gli array di puntatori sono spesso utilizzati per gestire una raccolta dinamica di dati, come array di stringhe
di lunghezze diverse, strutture di dimensioni diverse o altre strutture dati complesse. Possono essere utili
anche per semplificare l'accesso a dati multidimensionali o per implementare matrici dinamiche.
Tieni presente che, quando utilizzi array di puntatori, è importante gestire attentamente la memoria, in
particolare l'allocazione e la deallocazione dinamica, per evitare perdite di memoria o accessi non validi.