Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Struct e Union Anonime | Uso Avanzato Delle Struct
Struct in C
Sezione 4. Capitolo 3
single

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

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.

Compito

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.

  1. All'interno della funzione, calcolare la distanza del primo punto dall'origine utilizzando la formula.
  2. Inizializzare maxIndex a 0.
  3. Utilizzare un ciclo for da i = 1 a i = n per iterare sui punti.
  4. Per ogni punto, calcolare la distanza utilizzando la formula sopra indicata.
  5. Se la distanza è maggiore di maxDistance, aggiornare maxDistance e maxIndex con la distanza e l'indice del punto corrente.
  6. Al termine del ciclo, restituire maxIndex come indice del punto più distante.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 3
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

some-alt