Giới thiệu về Union trong C

  • Giới thiệu về Union trong C

    • 18 September 2018
    • Tự học lập trình C – C++

    Union trong C là một kiểu dữ liệu đặc biệt có sẵn trong C cho phép lưu trữ các kiểu dữ liệu khác nhau trong cùng một vị trí bộ nhớ. Bạn có thể xác định một liên kết với nhiều thành phần, nhưng chỉ một thành phần có thể chứa một giá trị tại bất kỳ thời điểm nào. Union cung cấp một cách hiệu quả để sử dụng cùng một vị trí bộ nhớ cho nhiều mục đích.

    Bạn đang đọc: Giới thiệu về Union trong C

    1. Định nghĩa Union trong C

    Để xác lập union, bạn phải sử dụng câu lệnh union giống như cách bạn đã làm khi xác lập một cấu trúc. Câu lệnh union xác lập một kiểu tài liệu mới với nhiều hơn một thành phần cho chương trình của bạn. Định dạng của câu lệnh union như sau :
    union [ union tag ] {
    thành viên definition ;
    thành viên definition ;

    thành viên definition ;
    } [ one or more union variables ] ;
    Các thẻ union là tùy chọn và mỗi thành phần là một biến thông thường, ví dụ điển hình như int i ; hoặc float f ; hoặc bất kể biến hợp lệ nào khác. Khi kết thúc union, trước dấu chấm phẩy ở đầu cuối, bạn hoàn toàn có thể chỉ định một hoặc nhiều biến union tùy chọn. Đây là cách bạn sẽ xác lập một loại link có tên là Data có ba thành viên i, f và str :
    union Data {
    int i ;
    float f ;
    char str [ 20 ] ;
    } data ;
    Một biến kiểu tài liệu hoàn toàn có thể tàng trữ một số nguyên, một số ít dấu phẩy động hoặc một chuỗi những ký tự. Có nghĩa là một biến duy nhất, cùng một vị trí bộ nhớ hoàn toàn có thể được sử dụng để tàng trữ nhiều loại tài liệu .
    Bộ nhớ bị chiếm bởi union đủ lớn để giữ thành phần lớn nhất, trong ví dụ trên, kiểu tài liệu sẽ chiếm 20 byte khoảng trống bộ nhớ vì đây là khoảng trống tối đa hoàn toàn có thể bị chiếm bởi một chuỗi ký tự. Ví dụ sau hiển thị tổng size bộ nhớ bị chiếm bởi union trên :
    # include
    # include
    union Data {
    int i ;
    float f ;
    char str [ 20 ] ;
    } ;
    int main ( ) {
    union Data data ;
    printf ( ” Memory size occupied by data : % d \ n “, sizeof ( data ) ) ;
    return 0 ;
    }
    Khi mã trên được biên dịch và thực thi, nó tạo ra hiệu quả sau :
    Memory size occupied by data : 20

    2. Truy cập các thành phần của Union

    Để truy vấn bất kể thành phần nào của union, chúng tôi sử dụng toán tử. Toán tử truy vấn thành phần được mã hóa như một khoảng chừng khoảng trống giữa biến union và thành phần union mà tất cả chúng ta muốn truy vấn. Bạn sẽ sử dụng link từ khóa để xác lập những biến của union. Ví dụ sau đây cho thấy cách sử dụng những union trong một chương trình :
    # include
    # include
    union Data {
    int i ;
    float f ;

      char str[20];

    } ;
    int main ( ) {
    union Data data ;
    data. i = 10 ;
    data. f = 220.5 ;
    strcpy ( data.str, ” C Programming ” ) ;
    printf ( ” data. i : % d \ n “, data. i ) ;
    printf ( ” data. f : % f \ n “, data. f ) ;
    printf ( ” data.str : % s \ n “, data.str ) ;
    return 0 ;
    }
    Khi mã trên được biên dịch và thực thi, nó tạo ra hiệu quả sau :
    data. i : 1917853763
    data. f : 4122360580327794860452759994368.000000
    data.str : C Programming
    Ở đây, tất cả chúng ta hoàn toàn có thể thấy rằng những giá trị của những thành phần i và f bị hỏng vì giá trị ở đầu cuối được gán cho biến đã chiếm vị trí bộ nhớ và đây là nguyên do giá trị của thành viên str được in rất tốt .
    Bây giờ tất cả chúng ta hãy nhìn vào ví dụ một lần nữa, nơi tất cả chúng ta sẽ sử dụng một biến tại một thời gian, đó là mục tiêu chính của việc có những link :
    # include
    # include
    union Data {
    int i ;
    float f ;
    char str [ 20 ] ;
    } ;
    int main ( ) {
    union Data data ;
    data. i = 10 ;
    printf ( ” data. i : % d \ n “, data. i ) ;
    data. f = 220.5 ;
    printf ( ” data. f : % f \ n “, data. f ) ;
    strcpy ( data.str, ” C Programming ” ) ;
    printf ( ” data.str : % s \ n “, data.str ) ;
    return 0 ;
    }
    Khi mã trên được biên dịch và thực thi, nó tạo ra tác dụng sau :
    data. i : 10

    data.f : 220.500000

    data.str : C Programming
    Ở đây, tổng thể những thành viên đều được in rất tốt vì những thành phần đang được sử dụng tại một thời gian .
    Tài liệu về lập trình C :