CC
ấấ
u trúc u trúc
StructStruct
CC
ấấ
u trúc u trúc
StructStruct
Phạm Thế Bảo
Trường Đạihọc Khoa họcTự nhiên Tp HCM
Trường
Đại
học
Khoa
học
Tự
nhiên
Tp
.
HCM
Kiể ấ túKiể ấ tú
Kiể
u c
ấ
u
t
r
ú
c
Kiể
u c
ấ
u
t
r
ú
c
KháiKhái niệmniệm
KhaiKhai báobáo
TruyTruy
xuấtxuất
cáccác
thànhthành
phầnphần
TruyTruy
xuấtxuất
cáccác
thànhthành
phầnphần
CấuCấutrúctrúc &&mảngmảng
ConCon trỏtrỏđếnđếncấucấutrúctrúc
Khái iệKhái iệ
Khái
n
iệ
m
Khái
n
iệ
m
CấuCấutrúctrúc làlà kiểukiểudữdữ liệuliệugồmgồmmộtmột nhómnhóm cáccác
thànhthành phầnphầncócó kiểukiểu khôngkhông giốnggiống nhaunhau,, mỗimỗi
hà hhà h
hầhầ
đđ
áá
đị hđị h
bằbằ
ộộ
êê
iêiê
t
hà
n
h
t
hà
n
h
phầ
n
phầ
n
đ
ược
đ
ượcx
á
cx
á
c
đị
n
hđị
n
h
bằ
ng
bằ
ng m
ộ
tm
ộ
tt
ê
nt
ê
nr
iê
ngr
iê
ng
biệtbiệt((kiểukiểudữdữ liệuliệutrừutrừutượngtượng –– AbstractAbstract DataData
TypeType
––
ADT)ADT)
TypeType
ADT)ADT)
KiểuKiểu
củacủa
mỗimỗi
thànhthành
phầnphần
trongtrong
cấucấu
trúctrúc
làlà
mộtmột
KiểuKiểu
củacủa
mỗimỗi
thànhthành
phầnphần
trongtrong
cấucấu
trúctrúc
làlà
mộtmột
kiếukiếu đãđã đượcđược địnhđịnh nghĩanghĩatrướctrước,, kểkể cảcả mảngmảng vàvà
cáccác c
ấ
uc
ấ
utrúctrúc kháckhác
Cấ túCấ tú
Kh i bá CKh i bá C
Cấ
u
t
r
ú
c
Cấ
u
t
r
ú
c
––
Kh
a
i
bá
o trong
CKh
a
i
bá
o trong
C
MộtMột
kiểukiểu
cấucấu
trúctrúc
đượcđược
địnhđịnh
nghĩanghĩa
vớivới
từtừ
khóakhóa
structstruct
MộtMột
kiểukiểu
cấucấu
trúctrúc
đượcđược
địnhđịnh
nghĩanghĩa
vớivới
từtừ
khóakhóa
structstruct
typedeftypedef structstruct TênkiểuTênkiểu
{{
Kiểuthành
p
hầnKiểuthành
p
hần Tênthành
p
hầnTênthành
p
hần;;
pp
pp
KiểuthànhphầnKiểuthànhphần TênthànhphầnTênthànhphần;;
KiểuthànhphầnKiểuthànhphần
TênthànhphầnTênthànhphần
;;
KiểuthànhphầnKiểuthànhphần
TênthànhphầnTênthànhphần
;;
KiểuthànhphầnKiểuthànhphần TênthànhphầnTênthànhphần;;
}};;
Cấ túCấ tú
ídíd
Cấ
u
t
r
ú
c
Cấ
u
t
r
ú
c
––
v
í
d
ụv
í
d
ụ
t
yp
edef struct TBook
t
yp
edef struct TDate
yp
{
char title[80];
char
author[80];
yp
{
char day;
char
month;
char
author[80];
float price;
char isbn[20];
};
char
month;
int year;
};
};
typedef struct TStudent
{
{
char ID[10];
char firstname[10];
char
lastname[20];
//khai báo các biến
TBook book;
TStudent
list[100];
char
lastname[20];
TDate dob;
float marks[10];
};
TStudent
list[100];
};
Cấ túCấ tú
T ấ áhàhhầT ấ áhàhhầ
CáCá
thà hthà h
hầhầ
ủủ
ộtột
biếbiế
kiểkiể
ấấ
tútú
đđ
tt
ấtất
Cấ
u
t
r
ú
c
Cấ
u
t
r
ú
c
––
T
ruy xu
ấ
t c
á
c t
hà
n
h
p
hầ
n
T
ruy xu
ấ
t c
á
c t
hà
n
h
p
hầ
n
Cá
c
Cá
c
thà
n
hthà
n
h
phầ
n
phầ
nc
ủ
ac
ủ
am
ột
m
ột
biế
n
biế
n
kiểukiểu
c
ấ
uc
ấ
u
t
r
ú
c
t
r
ú
c
đ
ược
đ
ược
t
ruy
t
ruy xu
ất
xu
ất
thôngthông quaqua têntên biến,biến, dấudấu"" ""vàvà têntên thànhthành phầnphần
void Print(TStudent m)
{
printf(
"
Name
:%s%s
\
n
"
printf( Name
:
%s
%s
\
n
,
m.firstname, m.lastname);
printf("Student ID : %s\n", m.ID);
printf("Date of birth
: %hi/%hi/%i"
printf("Date
of
birth
:
%hi/%hi/%i"
,
m.dob.day, m.dob.month, m.dob.year);
printf("Marks : ");
f (iti0 i10 i )
f
or
(i
n
t
i
=
0
;
i
<
10
;
i
++
)
printf("%.2f ", m.marks[i]);
}
Cấ túCấ tú
T ấ áhàhhầT ấ áhàhhầ
Cấ
u
t
r
ú
c
Cấ
u
t
r
ú
c
––
T
ruy xu
ấ
t c
á
c t
hà
n
h
p
hầ
n
T
ruy xu
ấ
t c
á
c t
hà
n
h
p
hầ
n
void ReadInfo(TStudent &m)
{
printf("Type student ID: ");
scanf("%s", m.ID);
printf("Type first name: ");
g
ets
(
m.firstname
);
g( );
printf("Type last name: ");
gets(m.lastname);
printf(
"
Date of birth (d m y):
"
);
printf( Date
of
birth
(d
m
y):
);
scanf("%hi %hi %i", &(m.dob.day),
&(m.dob.month), &(m.dob.year));
printf("Marks (10 floats): ");
printf("Marks
(10
floats):
");
for (int i=0; i<10; i++)
scanf("%f", &(m.marks[i]));
}
}
Kí h th ớ ủ ột ấ túKí h th ớ ủ ột ấ tú
Kí
c
h
th
ư
ớ
c c
ủ
a m
ột
c
ấ
u
t
r
ú
c
Kí
c
h
th
ư
ớ
c c
ủ
a m
ột
c
ấ
u
t
r
ú
c
Kí hKí h
th ớth ớ
kiểkiể
dữdữ
liệliệ
ấấ
tútú
Kí
c
hKí
c
h
th
ư
ớ
c
th
ư
ớ
c
kiể
u
kiể
u
dữdữ
liệ
u
liệ
uc
ấ
uc
ấ
u
t
r
ú
c
t
r
ú
c::
sizeofsizeof
(
<<
(
<<
typenametypename
>>
)
>>
)
sizeofsizeof
((
typenametypename
))
v
d
v
d
::
SinhVien_t_sizeSinhVien_t_size = = sizeofsizeof((SinhVienSinhVien);); // 48// 48
Mả áCấ túMả áCấ tú
Mả
ng c
á
c
Cấ
u
t
r
ú
c
Mả
ng c
á
c
Cấ
u
t
r
ú
c
Kh iKh i
bb
biếbiế
ảả
áá
CấCấ
tútú
ũũ
iốiố
hh
kh ikh i
bábá
Kh
a
i
Kh
a
i
b
ao
b
ao
biế
n
biế
nm
ả
ngm
ả
ng c
á
cc
á
c
Cấ
u
Cấ
u
t
r
ú
c
t
r
ú
cc
ũ
ngc
ũ
ng g
iố
ngg
iố
ng n
hư
n
hư
kh
a
ikh
a
i
bá
o
bá
o
biếnbiếnmảngmảng trêntrên cáccác kiểukiểudữdữ liệuliệucơcơ bảnbản kháckhác
DùngDùng têntên mảngmảng khikhi truytruy cậpcậptừngtừng phầnphầntửtử trongtrong mảngmảng cáccác
cấucấutrúctrúc vàvà toántoán tửtử thànhthành viênviên đểđể truytruy cậpcập cáccác trườngtrường dữdữ
liệuliệu
củacủa
từngtừng
thànhthành
phầnphần
cấucấu
trúctrúc
liệuliệu
củacủa
từngtừng
thànhthành
phầnphần
cấucấu
trúctrúc
. .
struct SinhVien
{
SinhVien
mang
[100];
{
char hoten[31];
int namsinh;
char
noisinh
[4];
SinhVien
mang
[100];
…
char
noisinh
[4];
char maso[11];
}
mang[i].namsinh
Ctỏ đế Cấ túCtỏ đế Cấ tú
C
on
t
r
ỏ
đế
n
Cấ
u
t
r
ú
c
C
on
t
r
ỏ
đế
n
Cấ
u
t
r
ú
c
Kh iKh i
bábá
t ỏt ỏ
đếđế
ấấ
tútú
tt
tt
hh
áá
kiểkiể
dữdữ
Kh
a
i
Kh
a
i
bá
o
bá
o con con
t
r
ỏt
r
ỏ
đế
n
đế
nc
ấ
uc
ấ
u
t
r
ú
c
t
r
ú
c
t
ương
t
ương
tựtự
n
hư
n
hư
c
á
cc
á
c
kiể
u
kiể
u
dữdữ
liệuliệu kháckhác
SinhVienSinhVien **SV_ptrSV_ptr
ToánToán tửtử truytruy cậpcậptrườngtrường thànhthành phầnphầncủacủacấucấutrúctrúc do con do con trỏtrỏ
chỉchỉđếnđến: : >>
SV_ptrSV_ptr >>namsinhnamsinh
SV tSV t
>>
iihiih
SV
_p
t
r
SV
_p
t
r
>>
no
i
s
i
n
h
no
i
s
i
n
h
UiUi
U
n
i
on
U
n
i
on
Kh iKh i
bábá
ii
đđ
dùdù
đểđể
kh ikh i
bábá
áá
biếbiế
dùdù
Kh
a
i
Kh
a
i
bá
o
bá
oun
i
on un
i
on
đ
ược
đ
ược
dù
ng
dù
ng
đểđể
kh
a
ikh
a
i
bá
o
bá
oc
á
cc
á
c
biế
n
biế
n
dù
ng
dù
ng
chungchung bộbộ nhớnhớ. .
union union int_or_longint_or_long {{
intint ii;;
longlong l;l;
} } a_numbera_number; ;
CácCác thànhthành phầnphầncủacủa union union cócó thểthể khôngkhông cócó kíchkích thướcthướcbằngbằng
nhaunhau
nhaunhau
KíchKích
thướcthước
bộbộ
nhớnhớ
trongtrong
khaikhai
báobáo
unionunion
làlà
kíchkích
thướcthước
củacủa
KíchKích
thướcthước
bộbộ
nhớnhớ
trongtrong
khaikhai
báobáo
union
union
làlà
kíchkích
thướcthước
củacủa
kiểukiểudữdữ liệuliệulớnlớnnhấtnhấtcócó trongtrong khaikhai báobáo union.union.
Ví dVí d
Ví
d
ụ
Ví
d
ụ
11
unionunion
int or longint or long
{{
1
.
1
.
unionunion
int
_
or
_
longint
_
or
_
long
{{
2.2. intint ii;;
3.3. longlong ll;;
4.4. }} a_numbe
r
a_numbe
r
;;
5.5. a_numbera_number ii==55;;
66
a numbera number
ll
==
100100
LL
;;
6
.
6
.
a
_
numbera
_
number
ll
100100
LL
;;
7.7. //// anonymousanonymous unionunion
8.8. unionunion {{
9.9. intint ii;;
10.10. floatfloat ff
;;
;;
11.11. }};;
12.12. ii==1010;;
ff
22
22
13.13.
ff
==
22
22
;;
KiểKiể
EE
((
liệtliệt
kêkê
))
Kiể
u
Kiể
u
E
num
E
num
((
liệtliệt
kêkê
))
KiểuKiểu EnumEnum::
LiệtLiệtkêkê toàntoàn bộbộ giágiá trịtrị màmà biếnbiếncócó thểthể nhậnnhận
KhaiKhai báobáo::
enumenum <<tên_kiểu_enumtên_kiểu_enum>{>{
<<danh sách các tr
ị
danh sách các tr
ị
>>___
ị
___
ị
}};;
VíVí d
ụ
d
ụ
::
ụụ
enumenum day{Hai,day{Hai, BaBa,, TuTu,, Nam,Nam, SauSau,, Bay,Bay, CN}CN};;
dayday
n
gay
n
gay
;;
dayday
gaygay
;;
ngayngay ==TuTu;;//// 22
enumenum
modes{LASTMODEmodes{LASTMODE
==
11
,,
BWBW
4040
==
00
}}
enumenum
modes{LASTMODEmodes{LASTMODE
11
,,
BWBW
4040
00
}}
TT
ậậ
p tin p tin
FileFile
TT
ậậ
p tin p tin
FileFile
Phạm Thế Bảo
Trường Đạihọc Khoa họcTự nhiên Tp HCM
Trường
Đại
học
Khoa
học
Tự
nhiên
Tp
.
HCM