single
Anonyymi Rakenne ja Unioni
Pyyhkäise näyttääksesi valikon
C-ohjelmointikielessä on anonyymejä rakenteita ja unioneita, jotka mahdollistavat rakenteiden ja unionien määrittelyn ilman nimen määrittämistä.
Mitä ovat anonyymit rakenteet ja unionit?
Anonyymillä unionilla tai rakenteella ei ole tunnistetta. Tämän vuoksi niistä ei voi luoda itsenäisiä muuttujia; sen sijaan niitä käytetään tyypillisesti muiden rakenteiden sisällä.
// Anonymous union
union {
char x;
int y;
};
// Anonymous structure
struct {
char x;
int y;
};
Anonyymiset rakenteet ja unionit ovat erityisen hyödyllisiä, kun ne sisällytetään toisiin rakenteisiin ja niitä käytetään vain siinä kontekstissa, jossa ne on määritelty.
Käytännön esimerkki
Tarkastellaan tilannetta, jossa halutaan esittää ASCII-taulukko, jossa sama arvo voidaan tulkita joko numeerisena koodina tai merkkisymbolina. Anonyymin unionin käyttäminen rakenteen sisällä mahdollistaa näiden kahden tulkinnan tehokkaan vaihtamisen.
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; }
Tässä esimerkissä rakenne ASCIItable sisältää anonyymin unionin. Unionin avulla samaa muistia voidaan tulkita joko numeerisena arvona (num) tai merkkinä (symbol).
Kun AZtable.num asetetaan arvoon 65, se vastaa ASCII-koodia 'A'. Käyttämällä samaa muistia, AZtable.symbol edustaa myös merkkiä 'A'. Iteroimalla 26 kertaa voidaan tulostaa kaikki isot kirjaimet ja niiden ASCII-koodit, mikä havainnollistaa, kuinka sama muisti voi esittää useita näkymiä datasta.
Pyyhkäise aloittaaksesi koodauksen
Luo funktio findFurthestPoint, joka etsii pisteen, joka on kauimpana origosta (0,0) kaksiulotteisella tasolla. Kukin piste esitetään rakenteella Point, joka sisältää anonyymin sisäkkäisen rakenteen, jossa on kentät x ja y.
Funktion tulee laskea jokaisen pisteen euklidinen etäisyys kaavalla:
distance = sqrt(x*x + y*y)
ja palauttaa sen pisteen indeksi, jolla on suurin etäisyys.
- Laske funktion sisällä ensimmäisen pisteen etäisyys origosta kaavan avulla.
- Alusta
maxIndexarvolla0. - Käytä
for-silmukkaa, jossai = 1ja toista pisteisiin astii = n. - Laske jokaiselle pisteelle etäisyys yllä olevalla kaavalla.
- Jos etäisyys on suurempi kuin
maxDistance, päivitämaxDistancejamaxIndexnykyisen pisteen etäisyyteen ja indeksiin. - Silmukan jälkeen palauta
maxIndexkauimmaisen pisteen indeksinä.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme