Anonym Struktur og Union
Programmeringsspråket C har anonyme strukturer og unioner, som gir mulighet til å definere strukturer og unioner uten å angi et navn.
Hva er anonyme strukturer og unioner?
En anonym union eller anonym struktur har ikke en identifikator. På grunn av dette kan du ikke opprette frittstående variabler av denne typen; de brukes vanligvis inne i andre strukturer.
// Anonymous union
union {
char x;
int y;
};
// Anonymous structure
struct {
char x;
int y;
};
Anonyme strukturer og unioner er spesielt nyttige når de er nestet og kun skal brukes i konteksten der de er deklarert.
Praktisk eksempel
Tenk deg et scenario der du ønsker å representere en ASCII-tabell hvor den samme verdien kan tolkes som enten en numerisk kode eller et tegnsymbol. Ved å bruke en anonym union inne i en struktur kan du effektivt veksle mellom disse to tolkningene.
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; }
I dette eksemplet inneholder strukturen ASCIItable en anonym union. Unionen gjør det mulig å tolke det samme minnet enten som en numerisk verdi (num) eller som et tegn (symbol).
Når AZtable.num settes til 65, tilsvarer det ASCII-koden for 'A'. Ved å bruke det samme minnet, representerer AZtable.symbol også 'A'. Ved å iterere 26 ganger kan vi skrive ut alle store bokstaver sammen med deres ASCII-koder, noe som demonstrerer hvordan samme minne kan representere flere visninger av dataene.
Swipe to start coding
Lag en funksjon findFurthestPoint som finner punktet som er lengst fra origo (0,0) i et 2D-plan. Hvert punkt representeres av en struktur Point som inneholder en anonym nestet struktur med feltene x og y.
Funksjonen skal beregne Euklidsk avstand for hvert punkt ved å bruke formelen:
distance = sqrt(x*x + y*y)
og returnere indeksen til punktet med størst avstand.
- Beregn avstanden fra det første punktet til origo inne i funksjonen ved hjelp av formelen.
- Initialiser
maxIndextil0. - Bruk en
for-løkke frai = 1tili = nfor å iterere gjennom punktene. - For hvert punkt, beregn avstanden ved å bruke formelen ovenfor.
- Hvis avstanden er større enn
maxDistance, oppdatermaxDistanceogmaxIndextil den nåværende avstanden og indeksen. - Etter løkken, returner
maxIndexsom indeksen til det punktet som er lengst unna.
Løsning
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Fantastisk!
Completion rate forbedret til 4.35
Anonym Struktur og Union
Sveip for å vise menyen
Programmeringsspråket C har anonyme strukturer og unioner, som gir mulighet til å definere strukturer og unioner uten å angi et navn.
Hva er anonyme strukturer og unioner?
En anonym union eller anonym struktur har ikke en identifikator. På grunn av dette kan du ikke opprette frittstående variabler av denne typen; de brukes vanligvis inne i andre strukturer.
// Anonymous union
union {
char x;
int y;
};
// Anonymous structure
struct {
char x;
int y;
};
Anonyme strukturer og unioner er spesielt nyttige når de er nestet og kun skal brukes i konteksten der de er deklarert.
Praktisk eksempel
Tenk deg et scenario der du ønsker å representere en ASCII-tabell hvor den samme verdien kan tolkes som enten en numerisk kode eller et tegnsymbol. Ved å bruke en anonym union inne i en struktur kan du effektivt veksle mellom disse to tolkningene.
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; }
I dette eksemplet inneholder strukturen ASCIItable en anonym union. Unionen gjør det mulig å tolke det samme minnet enten som en numerisk verdi (num) eller som et tegn (symbol).
Når AZtable.num settes til 65, tilsvarer det ASCII-koden for 'A'. Ved å bruke det samme minnet, representerer AZtable.symbol også 'A'. Ved å iterere 26 ganger kan vi skrive ut alle store bokstaver sammen med deres ASCII-koder, noe som demonstrerer hvordan samme minne kan representere flere visninger av dataene.
Swipe to start coding
Lag en funksjon findFurthestPoint som finner punktet som er lengst fra origo (0,0) i et 2D-plan. Hvert punkt representeres av en struktur Point som inneholder en anonym nestet struktur med feltene x og y.
Funksjonen skal beregne Euklidsk avstand for hvert punkt ved å bruke formelen:
distance = sqrt(x*x + y*y)
og returnere indeksen til punktet med størst avstand.
- Beregn avstanden fra det første punktet til origo inne i funksjonen ved hjelp av formelen.
- Initialiser
maxIndextil0. - Bruk en
for-løkke frai = 1tili = nfor å iterere gjennom punktene. - For hvert punkt, beregn avstanden ved å bruke formelen ovenfor.
- Hvis avstanden er større enn
maxDistance, oppdatermaxDistanceogmaxIndextil den nåværende avstanden og indeksen. - Etter løkken, returner
maxIndexsom indeksen til det punktet som er lengst unna.
Løsning
Takk for tilbakemeldingene dine!
single