Cấấu trúc u trúc -- Struct Struct C Cấấu trúc u trúc Struct Struct Phạm Thế Bảo Trường Đại học Khoa học Tự nhiên Tp HCM... Khái iệ Khái niệm CấuCấu trúctrúc làlà kiểukiểu dữdữ liệuliệu
Trang 1Cấấu trúc u trúc Struct Struct C
Cấấu trúc u trúc Struct Struct
Phạm Thế Bảo Trường Đại học Khoa học Tự nhiên Tp HCM
Trang 2Kiể ấ t ú
Kiểu cấu trú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ấu trúctrúc && mảngmảng
ConCon trỏtrỏ đếnđến cấucấu trúctrúc
Trang 3Khái iệ Khái niệm
CấuCấu trúctrúc làlà kiểukiểu dữdữ liệuliệu gồmgồm mộtmột nhómnhóm cáccác thành
thành phầnphần cócó kiểukiểu khôngkhông giốnggiống nhaunhau,, mỗimỗi
hà h
hà h hầhầ đđ áá đị hđị h bằbằ ộộ êê iê thành
thành phầnphần đượcđược xácxác địnhđịnh bằngbằng mộtmột têntên riêngriêng biệt
biệt ((kiểukiểu dữdữ liệuliệu trừutrừu tượngtượng –– AbstractAbstract DataData Type
Type –– ADT)ADT)
Type
Type 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ếu
kiếu đãđã đượcđược địnhđịnh nghĩanghĩa trướctrước,, kểkể cảcả mảngmảng vàvà các
các cấucấu trúctrúc kháckhác
Trang 4Cấ t ú Kh i bá Kh i bá C C
Cấu trúc
Một
Mộ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 struct struct
Một
Mộ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 struct struct
typedef struct Tênkiểu
{
Kiểuthànhphần p Tênthànhphần Tênthànhphần; p ; Kiểuthànhphần Tênthànhphần Tênthànhphần; ; Kiểuthànhphần Tênthànhphần Tênthànhphần; ;
Kiểuthànhphần Tênthànhphần Tênthànhphần; ; Kiểuthànhphần Tênthànhphần Tênthànhphần; ;
}
}; ;
Trang 5Cấ t ú í d
Cấu trúc
typedef struct TBook
typedef 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]; };
Trang 6Cấ t ú T T ấ á hà h hầ ấ á hà h hầ
CáCá thà hthà h hầhầ ủủ ộtột biếbiế kiểkiể ấấ t út ú đđ tt ất
Cấu trúc
CácCác thànhthành phầnphần củacủa mộtmột biếnbiến kiểukiểu cấucấu trúctrúc đượcđược truytruy xuấtxuất thông
thô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 (i t i 0 i 10 i )
for (int i=0; i<10; i++)
printf("%.2f ", m.marks[i]);
}
Trang 7Cấ t ú T T ấ á hà h hầ ấ á hà h hầ
Cấu trúc
void ReadInfo(TStudent &m)
{
printf("Type student ID: ");
scanf("%s", m.ID);
printf("Type first name: ");
gets(m.firstname);
printf("Type last name: ");
gets(m.lastname);
printf("Date of birth (d m y): ");
scanf("%hi %hi %i", &(m.dob.day),
&(m.dob.month), &(m.dob.year)); printf("Marks (10 floats): ");
for (int i=0; i<10; i++)
scanf("%f", &(m.marks[i]));
}
Trang 8Kí h th ớ ủ ột ấ t ú
Kích thước của một cấu trúc
Kí h
Kí h th ớth ớ kiểkiể dữdữ liệliệ ấấ t út ú
KíchKích thướcthước kiểukiểu dữdữ liệuliệu cấucấu trúctrúc::
sizeof sizeof(<<(<<typenametypename>>)>>) sizeof
sizeof(( typename ))
vdvd::
SinhVien_t_size SinhVien_t_size = = sizeofsizeof((SinhVienSinhVien);); // 48// 48
Trang 9Mả á Cấ t ú
Mảng các Cấu trúc
Kh i
Kh i bb biế ảả áá CấCấ t út ú ũũ iố hh kh ikh i bábá
Khai Khai baobao biếnbiến mảngmảng cáccác CấuCấu trúctrúc cũngcũng giốnggiống nhưnhư khaikhai báobáo biến
biến mảngmảng trêntrên cáccác kiểukiểu dữdữ liệuliệu cơcơ bảnbản kháckhác
DùngDùng têntên mảngmảng khikhi truytruy cậpcập từngtừng phầnphần tửtử trongtrong mảngmảng cáccác cấu
cấu trú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ệu
liệu củacủa từngtừng thànhthành phầnphần cấucấu trúctrúc
liệu
liệ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
Trang 10C t ỏ đế Cấ t ú
Con trỏ đến Cấu trúc
Kh i
Kh i bábá t ỏt ỏ đếđế ấấ t út ú tt tt hh áá kiểkiể dữdữ
Khai Khai báobáo con con trỏtrỏ đếnđến cấucấu trúctrúc tươngtương tựtự nhưnhư cáccác kiểukiểu dữdữ
liệu
liệu kháckhác
SinhVien SinhVien **SV_ptrSV_ptr
ToánToán tửtử truytruy cậpcập trườngtrường thànhthành phầnphần củacủa cấucấu trúctrúc do con do con trỏtrỏ chỉ
chỉ đếnđến: : >>
SV_ptr
SV_ptr >>namsinhnamsinh
SV t
SV t >> i i hi i h SV_ptr
SV_ptr >>noisinhnoisinh
Trang 11U i
Union
Kh i
Kh i bábá ii đđ dù đểđể kh ikh i bábá áá biếbiế dùdù
Khai Khai báobáo union union đượcđược dùngdùng đểđể khaikhai báobáo cáccác biếnbiến dùngdùng
chung
chung bộbộ nhớnhớ
union
union int_or_longint_or_long {{
int ii;;
long l;
} } a_numbera_number; ;
CácCác thànhthành phầnphần củacủa union union cócó thểthể khôngkhông cócó kíchkích thướcthước bằngbằng nhau
nhau
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ểu
kiểu dữdữ liệuliệu lớnlớn nhấtnhất cócó trongtrong khaikhai báobáo union.union
Trang 12Ví d
Ví dụ
11 union union int or long int or long {{
1 union union int_or_long int_or_long {{
2 int ii;;
3 long ll;;
4 }} a_number a_number;;
5 a_number a_number ii = = 55;;
66 a number a number ll = = 100 100L L;;
6 a_number a_number ll 100 100L L;;
7 // // anonymous anonymous union union
8 union union {{
9 int ii;;
10 float ff;;;;
11 }};;
12 ii = = 10 10;;
ff 22 22
13 ff = = 22 22;;
Trang 13Kiểu
Kiểu Enum Enum ((liệt liệt kê kê))
KiểuKiểu EnumEnum::
LiệtLiệt kêkê toàntoàn bộbộ giágiá trịtrị màmà biếnbiến cócó thểthể nhậnnhận
KhaiKhai báobáo::
enum
enum <<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ụ::ụụ
enum
enum day{Hai,day{Hai, BaBa,, TuTu,, Nam,Nam, SauSau,, Bay,Bay, CN}CN};;
day day ngayngay;;
day gaygay;;
ngay
ngay == TuTu;; //// 22 enum
enum modes{LASTMODEmodes{LASTMODE == 11,, BWBW4040 == 00}} enum
enum modes{LASTMODEmodes{LASTMODE 11,, BWBW4040 00}}
Trang 14T Tậập tin p tin File File T
Tậập tin p tin File File
Phạm Thế Bảo Trường Đại học Khoa học Tự nhiên Tp HCM