Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Các cấu trúc lồng nhau






Cá c cấ u trú c có thể đ ư ợ c đ ặ t lồ ng nhau vì vậ y mộ t phầ n tử hợ p lệ củ a mộ t cấ u trú c có thể là mộ t cấ u trú c khá c.

struct movies_t { char title [50]; int year; } struct friends_t { char name [50]; char email [50]; movies_t favourite_movie; } charlie, maria; friends_t * pfriends = & charlie;

Vì vậ y, sau phầ n khai bá o trê n chú ng ta có thể sử dụ ng cá c biể u thứ c sau:

charlie.name
maria.favourite_movie.title
charlie.favourite_movie.year
pfriends-> favourite_movie.year

(trong đ ó hai biể u thứ c cuố i cù ng là tư ơ ng đ ư ơ ng).

Cá c khá i niệ m cơ bả n về cấ u trú c đ ư ợ c đ ề cậ p đ ế n trong phầ n nà y là hoà n toà n giố ng vớ i ngô n ngữ C, tuy nhiê n trong C++, cấ u trú c đ ã đ ư ợ c mở rộ ng thê m cá c chứ c nă ng củ a mộ t lớ p vớ i tí nh chấ t đ ặ c trư ng là tấ t cả cá c phầ n tử củ a nó đ ề u là cô ng cộ ng (public). Bạ n sẽ có thê m cá c thô ng tin chi tiế t trong phầ n 4.1, Lớ p.

Bà i 12: Cá c Kiể u Dữ Liệ u Do Ngư ờ i Dù ng Đ ị nh Nghĩ a

Trong bà i trư ớ c chú ng ta đ ã xem xé t mộ t loạ i dữ liệ u đ ư ợ c đ ị nh nghĩ a bở i ngư ờ i dù ng (ngư ờ i lậ p trì nh): cấ u trú c. Như ng có cò n nhiề u kiể u dữ liệ u tự đ ị nh nghĩ a khá c:

Tự đ ị nh nghĩ a cá c kiể u dữ liệ u (typedef).

C++ cho phé p chú ng ta đ ị nh nghĩ a cá c kiể u dữ liệ u củ a riê ng mì nh dự a trê n cá c kiể u dữ liệ u đ ã có. Đ ể có thể là m việ c đ ó chú ng ta sẽ sử dụ ng từ khoá typedef , dạ ng thứ c như sau:

typedef existing_type new_type_name ;

trong đ ó existing_type là mộ t kiể u dữ liệ u cơ bả n hay bấ t kì mộ t kiể u dữ liệ u đ ã đ ị nh nghĩ a và new_type_name là tê n củ a kiể u dữ liệ u mớ i. Ví dụ

typedef char C;
typedef unsigned int WORD;
typedef char * string_t;
typedef char field [50];

Trong trư ờ ng hợ p nà y chú ng ta đ ã đ ị nh nghĩ a bố n kiể u dữ liệ u mớ i: C , WORD , string_t field kiể u char , unsigned int , char* kiể u char[50] , chú ng ta hoà n toà n có thể sử dụ ng chú ng như là cá c kiể u dữ liệ u hợ p lệ:

C achar, anotherchar, *ptchar1;
WORD myword;
string_t ptchar2;
field name;

typedef có thể hữ u dụ ng khi bạ n muố n đ ị nh nghĩ a mộ t kiể u dữ liệ u đ ư ợ c dù ng lặ p đ i lặ p lạ i trong chư ơ ng trì nh hoặ c kiể u dữ liệ u bạ n muố n dù ng có tê n quá dà i và bạ n muố n nó có tê n ngắ n hơ n.

Union

Union cho phé p mộ t phầ n bộ nhớ có thể đ ư ợ c truy xuấ t dư ớ i dạ ng nhiề u kiể u dữ liệ u khá c nhau mặ c dù tấ t cả chú ng đ ề u nằ m cù ng mộ t vị trí trong bộ nhớ. Phầ n khai bá o và sử dụ ng nó tư ơ ng tự vớ i cấ u trú c như ng chứ c nă ng thì khá c hoà n toà n:

union model_name { type1 element1; type2 element2; type3 element3 ;..} object_name;

Tấ t cả cá c phầ n tử củ a union đ ề u chiế m cù ng mộ t chỗ trong bộ nhớ. Kí ch thư ớ c củ a nó là kí ch thư ớ c củ a phầ n tử lớ n nhấ t. Ví dụ:

union mytypes_t { char c; int i; float f; } mytypes;

đ ị nh nghĩ a ba phầ n tử

mytypes.c
mytypes.i
mytypes.f

mỗ i phầ n tử có mộ t kiể u dữ liệ u khá c nhau. Như ng vì tấ t cả chú ng đ ề u nằ m cù ng mộ t chỗ trong bộ nhớ nê n bấ t kì sự thay đ ổ i nà o đ ố i vớ i mộ t phầ n tử sẽ ả nh hư ở ng tớ i tấ t cả cá c thà nh phầ n cò n lạ i.

Mộ t trong nhữ ng cô ng dụ ng củ a union là dù ng đ ể kế t hợ p mộ t kiể u dữ liê u cơ bả n vớ i mộ t mả ng hay cá c cấ u trú c gồ m cá c phầ n tử nhỏ hơ n. Ví dụ:

union mix_t{ long l; struct { short hi; short lo; } s; char c[4]; } mix;

đ ị nh nghĩ a ba phầ n tử cho phé p chú ng ta truy xuấ t đ ế n cù ng mộ t nhó m 4 byte: mix.l , mix.s mix.c mà chú ng ta có thể sử dụ ng tuỳ theo việ c chú ng ta muố n truy xuấ t đ ế n nhó m 4 byte nà y như thế nà o. Tô i dù ng nhiề u kiể u dữ liệ u khá c nhau, mả ng và cấ u trú c trong union đ ể bạ n có thể thấ y cá c cá ch khá c nhau mà chú ng ta có thể truy xuấ t dữ liệ u.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал