Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α20.11 · Χρήση ένωσης και μέγεθος

Διάλεξη 20, διαφάνεια 19 · Δυσκολία ★★☆ · trace · Κεφάλαια: 20

Τι θα τυπώσει το πρόγραμμα;

#include <stdio.h>

union anything {
  char c;  int i;  float f;  double d;
};

int main() {
  union anything a1;
  a1.i = 0x42;
  printf("%d %c\n", a1.i, a1.c);
  a1.c = 'C';
  printf("%d %c\n", a1.i, a1.c);
  printf("%zu\n", sizeof(a1));
  return 0;
}

Υπόδειξη

Όλα τα μέλη της ένωσης ξεκινούν από το ίδιο byte, οπότε το c είναι το πρώτο byte του i. Σκεφτείτε ποιο byte ενός ακεραίου είναι πρώτο σε ένα little-endian μηχάνημα, και ότι το μέγεθος της ένωσης καθορίζεται από το μεγαλύτερο μέλος.

Αριθμός στον οδηγό: Α20.11 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: slides-lec20-union-size · Σύνδεσμος: https://progintro.github.io/study/questions/slides/slides-lec20-union-size.html · Markdown (GitHub)