single
Struct e Union Anonime
Scorri per mostrare il menu
Il linguaggio di programmazione C dispone di struct anonime e union anonime, che permettono di definire struct e union senza specificare un nome.
Cosa sono le struct e le union anonime?
Una union anonima o una struct anonima non possiede un identificatore. Per questo motivo, non è possibile creare variabili autonome di quel tipo; vengono invece utilizzate tipicamente all'interno di altre struct.
// Anonymous union
union {
char x;
int y;
};
// Anonymous structure
struct {
char x;
int y;
};
Le struct e le union anonime sono particolarmente utili quando sono annidate e verranno utilizzate solo nel contesto in cui sono dichiarate.
Esempio pratico
Considerare uno scenario in cui si desidera rappresentare una tabella ASCII in cui lo stesso valore può essere interpretato come codice numerico o come simbolo carattere. Utilizzare una union anonima all'interno di una struttura consente di passare in modo efficiente tra queste due interpretazioni.
main.c
123456789101112131415161718192021#include <stdio.h> struct ASCIItable { // Anonymous union allows dual representation of the same memory union { char symbol; int num; }; }; int main() { struct ASCIItable AZtable; AZtable.num = 65; // ASCII code for 'A' // Print all uppercase letters and their numeric codes for (int i = 0; i < 26; i++) { printf("num = %d | symbol = `%c`\n", AZtable.num + i, AZtable.symbol + i); } return 0; }
In questo esempio, la struttura ASCIItable contiene una union anonima. La union permette di interpretare la stessa area di memoria sia come valore numerico (num) sia come carattere (symbol).
Quando AZtable.num viene impostato a 65, corrisponde al codice ASCII di 'A'. Utilizzando la stessa memoria, AZtable.symbol rappresenta anch'esso 'A'. Iterando 26 volte, è possibile stampare tutte le lettere maiuscole insieme ai rispettivi codici ASCII, dimostrando come la stessa memoria possa rappresentare più viste dei dati.
Scorri per iniziare a programmare
Creare una funzione findFurthestPoint che individua il punto più distante dall'origine (0,0) in un piano 2D. Ogni punto è rappresentato da una struttura Point che contiene una struttura annidata anonima con i campi x e y.
La funzione deve calcolare la distanza euclidea per ciascun punto utilizzando la formula:
distance = sqrt(x*x + y*y)
e restituire l'indice del punto con la distanza massima.
- All'interno della funzione, calcolare la distanza del primo punto dall'origine utilizzando la formula.
- Inizializzare
maxIndexa0. - Utilizzare un ciclo
fordai = 1ai = nper iterare sui punti. - Per ogni punto, calcolare la distanza utilizzando la formula sopra indicata.
- Se la distanza è maggiore di
maxDistance, aggiornaremaxDistanceemaxIndexcon la distanza e l'indice del punto corrente. - Al termine del ciclo, restituire
maxIndexcome indice del punto più distante.
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione