Dichiarazioni di unioneUnion Declarations

Una "Dichiarazione di unione" specifica un set di valori variabili e, facoltativamente, un tag per assegnare un nome all'unione.A "union declaration" specifies a set of variable values and, optionally, a tag naming the union. I valori variabili sono denominati "membri" dell'unione e possono includere diversi tipi.The variable values are called "members" of the union and can have different types. Le unioni sono simili ai "record variabili" presenti in altri linguaggi.Unions are similar to "variant records" in other languages.

SintassiSyntax

struct-or-union-specifier:struct-or-union-specifier:
struct-or-union identifier opt{ struct-declaration-list }struct-or-union identifier opt{ struct-declaration-list }

struct-or-union identifierstruct-or-union identifier

struct-or-union:struct-or-union:
structstruct

unionunion

struct-declaration-list:struct-declaration-list:
struct-declarationstruct-declaration

struct-declaration-list struct-declarationstruct-declaration-list struct-declaration

Il contenuto dell'unione viene definito comeThe union content is defined to be

struct-declaration:struct-declaration:
specifier-qualifier-list struct-declarator-list ;specifier-qualifier-list struct-declarator-list ;

specifier-qualifier-list:specifier-qualifier-list:
type-specifier specifier-qualifier-list opttype-specifier specifier-qualifier-list opt

type-qualifier specifier-qualifier-list opttype-qualifier specifier-qualifier-list opt

struct-declarator-list:struct-declarator-list:
struct-declaratorstruct-declarator

struct-declarator-list , struct-declaratorstruct-declarator-list , struct-declarator

Una variabile di tipo union archivia uno dei valori definiti dallo questo tipo.A variable with union type stores one of the values defined by that type. Le stesse regole si applicano alla struttura e alle dichiarazioni di unione.The same rules govern structure and union declarations. Le unioni possono inoltre contenere campi di bit.Unions can also have bit fields.

I membri delle unioni non possono avere un tipo incompleto, un tipo void o un tipo funzione.Members of unions cannot have an incomplete type, type void, or function type. Di conseguenza, i membri non possono essere un'istanza dell'unione ma possono essere puntatori al tipo di unione dichiarato.Therefore members cannot be an instance of the union but can be pointers to the union type being declared.

Una dichiarazione del tipo di unione è solo un modello.A union type declaration is a template only. La memoria non viene riservata fino a che la variabile non viene dichiarata.Memory is not reserved until the variable is declared.

Nota

Se viene dichiarata un'unione di due tipi e viene archiviato un valore, ma l'accesso all'unione viene eseguito con l'altro tipo, i risultati sono inaffidabili.If a union of two types is declared and one value is stored, but the union is accessed with the other type, the results are unreliable. Ad esempio, viene dichiarata un'unione di float e int.For example, a union of float and int is declared. Un valore float viene archiviato, ma in seguito il programma accede al valore come int.A float value is stored, but the program later accesses the value as an int. In una situazione del genere il valore dipende dall'archiviazione interna di valori float.In such a situation, the value would depend on the internal storage of float values. L'Integer non sarebbe affidabile.The integer value would not be reliable.

EsempiExamples

Di seguito sono riportati alcuni esempi di unioni:The following are examples of unions:

union sign   /* A definition and a declaration */  
{  
    int svar;  
    unsigned uvar;  
} number;  

In questo esempio viene definita una variabile di unione con il tipo sign e viene dichiarata una variabile denominata number che contiene due membri: svar, un Signed Integer, e uvar, un Unsigned Integer.This example defines a union variable with sign type and declares a variable named number that has two members: svar, a signed integer, and uvar, an unsigned integer. Questa dichiarazione consente di archiviare il valore corrente di number come valore con segno o senza.This declaration allows the current value of number to be stored as either a signed or an unsigned value. Il tag associato a questo tipo di unione è sign.The tag associated with this union type is sign.

union               /* Defines a two-dimensional */  
{                   /*  array named screen */  
    struct      
    {   
      unsigned int icon : 8;    
      unsigned color : 4;  
    } window1;  
    int screenval;  
} screen[25][80];  

La matrice di screen contiene 2.000 elementi.The screen array contains 2,000 elements. Ogni elemento della matrice rappresenta una singola unione con due membri: window1 e screenval.Each element of the array is an individual union with two members: window1 and screenval. Il membro window1 è una struttura con due membri del campo di bit, icon e color.The window1 member is a structure with two bit-field members, icon and color. Il membro screenval è un int.The screenval member is an int. In qualsiasi momento, ogni elemento unione contiene l'int rappresentato da screenval o la struttura rappresentata da window1.At any given time, each union element holds either the int represented by screenval or the structure represented by window1.

Sezione specifica MicrosoftMicrosoft Specific

Le unioni annidate possono essere dichiarate anonimamente quando sono membri di un'altra struttura o unione.Nested unions can be declared anonymously when they are members of another structure or union. Quello riportato di seguito è un esempio di unione senza nome:This is an example of a nameless union:

struct str  
{  
    int a, b;  
    union            / * Unnamed union */  
    {  
      char c[4];  
      long l;  
      float f;  
   };  
   char c_array[10];  
} my_str;  
.  
.  
.  
my_str.l == 0L;  /* A reference to a field in the my_str union */  

Spesso le unioni sono annidate all'interno di una struttura, nella quale è presente un campo che fornisce il tipo di dati contenuti nell'unione in un qualsiasi momento.Unions are often nested within a structure that includes a field giving the type of data contained in the union at any particular time. Quello riportato di seguito è un esempio di dichiarazione per questo tipo di unione:This is an example of a declaration for such a union:

struct x  
{  
    int type_tag;  
    union  
    {  
      int x;  
      float y;  
    }  
}  

Per informazioni sui riferimenti alle unioni, vedere Membri di struttura e di unione.See Structure and Union Members for information about referencing unions.

Fine sezione specifica MicrosoftEND Microsoft Specific

Vedere ancheSee Also

Dichiaratori e dichiarazioni di variabiliDeclarators and Variable Declarations