Bài giảng Kỹ thuật lập trình - Chương 2: Các yếu tố cơ bản của C và C++
Nội dung chương 2
2.1 Tổ chức chương trình C/C++
2.2 Bộ tiền xử lý
2.3 Biến và các kiểu dữ liệu cơ bản
2.4 Các kiểu dữ liệu dẫn xuất trực tiếp
2.5 Định nghĩa kiểu dữ liệu mới
2.6 Điều khiển chương trình: phân nhánh
2.7 Điều khiển chương trình: vòng lặp
2.8 Một số lệnh ₫iều khiển chương trình khá
2.1 Tổ chức chương trình C/C++
2.2 Bộ tiền xử lý
2.3 Biến và các kiểu dữ liệu cơ bản
2.4 Các kiểu dữ liệu dẫn xuất trực tiếp
2.5 Định nghĩa kiểu dữ liệu mới
2.6 Điều khiển chương trình: phân nhánh
2.7 Điều khiển chương trình: vòng lặp
2.8 Một số lệnh ₫iều khiển chương trình khá
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 2: Các yếu tố cơ bản của C và C++", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_ky_thuat_lap_trinh_chuong_2_cac_yeu_to_co_ban_cua.pdf
Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 2: Các yếu tố cơ bản của C và C++
- Từ khóa trong C++ asm auto bool break case catch char class const const_cast continue default delete else extern do enum false double explicit float dynamic_cast export for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_castN struct switch template Ơ this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 11 Ch ©
- Biên dịch (compile) Biên dịch từng file nguồnriêngbiệt (*.c: C compiler, *.cpp: C++ compiler), kếtquả => *.obj Trong Visual C++: Gọi Compile (Ctrl + F7) ₫ể biên dịch riêng rẽ hoặc Build (F7) ₫ể kếthợpbiêndịch và liên kếtchotoànbộ dự án Các kiểulỗibiêndịch (compile error): —Lỗicúpháp: Sử dụng tên sai qui ₫ịnh hoặcchưa khai báo, thiếu dấuchấmphảy ;, dấu ₫óng } —Lỗikiểu: Các số hạng trong biểuthứckhôngtương thích kiểu, gọi hàm vớithamsố sai kiểu — N Ơ Các kiểucảnh báo biên dịch (warning): —Tự₫ộng chuyển ₫ổikiểulàmmất chính xác — Hàm khai báo có kiểutrả về nhưng không trả về —Sử dụng dấu = trong trường hợpnghivấnlàso sánh== — 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 12 Ch ©
- Liên kết (link) MyProg.obj MyLib1.obj MyLib2.obj xx.obj yy.lib MyProg.exe Liên kết là quá trình ghép nhiềufile ₫ích (*.obj, *.lib) ₫ể tạorachương trình chạycuốicùng*.exe Trong Visual C++: Gọi Build (F7) Lỗiliênkếtcóthể là do: N Ơ —Sử dụng hàm nhưng không có ₫ịnh nghĩahàm —Biếnhoặchàm₫ược ₫ịnh nghĩa nhiềulần — 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 13 Ch ©
- Chạythử và gỡ rối (debug) Chạythử trong Visual C++: Execute hoặc Ctrl+F5 Tìm lỗi: —Lỗi khi chạylàlỗithuộcvề phương pháp, tư duy, thuậttoán, không phảivề cú pháp —Lỗi khi chạybìnhthường không ₫ược báo —Lỗi khi chạyrất khó phát hiện, vì thế trong ₫asố trường hợp cầntiếnhànhdebug. Chạy Debug trong Visual C++: —Chạytớichỗ₫ặt cursor: Ctrl+F10 —Chạytừng dòng lệnh: F10 N Ơ —Chạyvàotronghàm: F11 —Chạytiếpbìnhthường: F5 —Xemkếtquả dướicửasổ Output hoặcgọiQuickWatch 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 14 Ch ©
- Tổ chứcbộ nhớ Hệđiều hành Các CT khác Mã chương trình Đỉnh ngănxếp SP Dữ liệu toàn cục n Matran_A Vùng nhớ tự do f Ngănxếp k N Ơ (tham biến, biến i cụcbộ) count a Vùng nhớ tự do 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 15 Ch ©
- 2.2 Bộ tiền xử lý Bộ tiền xử lý là một phần chương trình ₫ược soạn thảo mô tả các chỉ thị như bộ xử lý macro thực hiện trước khi chương trình biên dịch bắt ₫ầu thực thi Æ Tăng tính linh hoạt trong việc viết và biên dịch chương trình Ví dụ: #define NAME string #define SQR (number) ((number) * (number)) #define ABORT {(void) printf (“Abort”); exit(1); } N Ơ #ifdef SYMBOL . #endif 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 16 Ch ©
- 2.2.1 Chỉ thị #define Chỉ thị #define cho phép chương trình ₫ịnh nghĩa một macro thay thế ₫ơn giản. Cú pháp: #define NAME string Ví dụ: #define ARRAY_MAX 10 int array[ARRAY_MAX]; Chú ý: — Theo qui ước hầu hết tên các hằng là tất cả chữ hoa — Đóng ngoặc ₫ơn cho tất cả các hằng chứa nhiều hơn một số ₫ơn. Ví dụ: #define LENGTH (3+5) thay vì #define LENGTH 3+5 N Ơ — Luôn ₫óng các macro nhiều câu lệnh trong các ngoặc móc nhọn { }. Ví dụ: #define ABORT {(void) printf(“Aborting”); exit(1);} thay vì #define ABORT (void) printf(“Aborting”); exit(1); 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 17 Ch ©
- 2.2.2 Tham số hoá Macro Ví dụ: #define SQR (number) (number * number) size = SQR(5); /*size = (5 * 5)*/ size = SQR (length + width) ; /* size = (length + width * length + width) */ Chú ý: — Luôn ₫ặt ngoặc ₫ơn bao ngoài các tham số trong một macro tham số hoá. Viết lại macro trên: #define SQR (number) ((number) * (number)) N Ơ —Cẩn thận với các phép toán rút gọn khi sử dụng macro. Ví dụ: value = 1; square = SQR (value++) ; /* sai */ /* square = ((value++) * (value++) )*/ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 18 Ch ©
- 2.2.3 Chỉ thị #ifdef , #endif Ví dụ: #ifdef SYMBOL /* thuc hien ma lenh neu thoa man*/ #endif Muốn kích hoạt phần thực hiện chương trình này nhập câu lệnh từ ₫ầu chương trình như sau: #define SYMBOL Chỉ thị ₫ồng hành #else và #ifndef Ví dụ: #ifdef DEBUG (void) printf(“Debugging version\n”); N Ơ #else (void) printf(“Production version\n”); #endif 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 19 Ch ©
- 2.2.4 Chỉ thị #include Chỉ thị #include chỉ cho bộ tiền xử lý nhận nội dung của tệp khác và nhập chúng vào chương trình. Ví dụ: #include /* Tệp chứa ở trong hệ thống chuẩn */ #include “file2.h” /* Tệp chứa ở trong thư mục ₫ang phát triển chương trình */ Để tránh trường hợp nhập nội dung một tệp vào N chương trình nhiều hơn một lần do chỉ thị nhập ₫ã ẩn Ơ chứa trong chính các nội dung nhập. Ví dụ: #include “module_a.h” #include “module_b.h” 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 20 Ch ©
- 2.2.4 Chỉ thị #include Giả thiết cả hai ₫ều chứa chỉ thị nhập tệp, ví dụ #include “defs.h” Để tránh trường hợp này tệp defs.h cần ₫ược bổ sung như sau ở ₫ầu tệp ví dụ như: #ifndef _DEFS_H #define _DEFS_H và ở cuối tệp #endif N Ơ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 21 Ch ©
- 2.2.5 Chỉ thị #error Chỉ thị error sẽ dừng thực hiện chương trình và in ra một thông báo lỗ. Ví dụ: #if (NAME_TABLE > MAX_TABLE)||(ID_TABLE > MAX_TABLE) #error MAX_TABLE #endif N Ơ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 22 Ch ©
- 2.3 Biếnvàdữ liệu Biểuthức= dữ liệu + phép toán + Biểudiễndữ liệu: Thông qua biến hoặc hằng số, kèm theo kiểu Nội dung trong phầnnày: —Cáckiểudữ liệucơ bản — Các phép toán áp dụng —Tương thích và chuyển ₫ổikiểu — Khai báo biến, phân loạibiến N Ơ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 23 Ch ©
- 2.3.1 Các kiểudữ liệu cơ bảncủaC/C++ KiểuKíchcỡ thông dụng Phạmvi tốithiểu (tính bằng bit) char 8 −127 to 127 signed char 8 −127 127 unsigned char 8 0 255 int 16/32 −32767 32767 signed int 16/32 -nt- unsigned int 16/32 0 65535 short 16 −32767 32767 signed short 16 nt unsigned short 16 0 65535 long 32 −2147483647 2147483647 signed long 32 - nt- unsignedN long 32 0 4294967295 floatƠ 32 Độ chính xác 6 chữ số double 64 Độ chính xác 15 chữ số long double 80 Độ chính xác 17 chữ số bool (C++) - - wchar_t (C++) 16 −32767 32767 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 24 Ch ©
- Các phép toán cơ bản Phép toán Ký hiệuKiểu nguyên Kiểusố thựcKiểu bool Gán = XXX Số học +, -, *, /, XXx +=, -=, *=, /= %, %= Xx ++, Xx So sánh >, =, >, >= Xx Lựachọn ? : XXX Lũythừa? Không có! 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 25 Ch ©
- Tương thích và chuyển ₫ổikiểu Tương thích kiểu=> Tự₫ộng chuyển ₫ổikiểu —Giữacáckiểusố nguyên vớinhau(lưuý phạm vi giá trị) —Giữacáckiểusố thựcvớinhau(lưuý ₫ộ chính xác) —Giữacáckiểusố nguyên và số thực(lưuý phạm vi giá trị và ₫ộ chính xác) —Kiểu bool sang số nguyên, số thực: true => 1, false => 0 —Số nguyên, số thựcsang kiểu bool: ≠ 0 => true, 0 => false Nếucólỗihoặccảnh báo => khắcphụcbằng cách ép chuyển ₫ổikiểu: —VD: N Ơ i = int(2.2) % 2; j = (int)2.2 + 2; // C++ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 26 Ch ©
- Nhìn nhận về chuyển ₫ổikiểu long long double int double short float char bool N Ơ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 27 Ch ©
- Nhìn nhận về chuyển ₫ổikiểu long long double double int short float N Ơ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 28 Ch ©
- 2.3.2 Khai báo biến char c = 'N'; Khai báo và khởitạogiátrị bool b = true; int kq; Chỉ khai báo, giá trị bất ₫ịnh double d; long count, i=0; Khai báo kếthợp, chỉ i=0 unsigned vhexa=0x00fa; Đặtgiátrị₫ầu hexa unsigned voctal=082; Đặtgiátrị₫ầu octal -> 66 chứ không phải 82 C: Toàn bộ biếnphải khai báo ngay ₫ầuthânhàm C++: Có thể khai báo tạichỗ nào cần, trước khi sử dụng Phân loạibiến: —Biếntoàncục: Khai báo ngoài hàm, lưugiữ trong vùng nhớ dữ liệu N Ơ chương trình —Biếncụcbộ: Khai báo trong thân hàm, lưugiữ trong ngănxếp —Thambiến: Khai báo trên danh sách tham số củahàm, lưugiữ trong ngănxếp 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 29 Ch ©
- Ví dụ khai báo các loạibiến Biếntoàncục int N = 1; void main() { char c = 'N'; do { printf(“\nEnter a number > 0:"); scanf("%d",&N); Biếncụcbộ int kq = factorial(N); // C++ only! } while (c == 'y' || c == 'Y') Hai biếncụcbộ } cùng tên ở hai phạm int factorial(int n) { vi khác nhau, int kq = 1; khôngliênquangì while (n > 1) ₫ếnnN hau! kq *= n ; Ơ return kq; } Tham biến 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 30 Ch ©
- Đặctínhlưugiữ Biến extern: Khai báo sử dụng biếntoàncục ₫ã ₫ược ₫ịnh nghĩavàgángiátrị trong mộttập tin khác /* file1.c */ /* file2.c */ int x, y; extern int x, y; char ch; extern char ch; void main() void func22() { { /* */ x = y / 10; } } void func1(void) void func23() { { x = 123; y = 10; } } N Ơ Biến static: ₫ượclưutrữ trong bộ nhớ dữ liệuCT —Biếnstatic cụcbộ: hạnchế truy nhậptừ bên ngoài hàm —Biến static toàn cục: hạnchế truy nhậptừ file khác 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 31 Ch ©
- 2.3.3 Hằng số (trựckiện) KiểuVídụ int 1 123 21000 −234 0x0A 081 long int 35000L −34l −234L 0x0AL 081L unsigned int 10000U 987u 40000u float 123.23F 4.34e−3f .1f double 123.23 1.0 −0.9876324 .1e−10 long double 1001.2L char ‘A’ ‘B’ ‘ ‘ ‘a’ ‘\n’ ‘\t’ ‘\b’ N Ơ bool true false wchar_t L’A’ L’B’ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 32 Ch ©
- 2.4 Các kiểudữ liệu dẫnxuấttrựctiếp Kiểuliệtkê Kiểuhằng Kiểucon trỏ Kiểumảng Kiểuthamchiếu (C++) N Ơ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 33 Ch ©
- 2.4.1 Kiểuliệtkê(enum) Mục ₫ích sử dụng: — Định nghĩamộtkiểulàtậpcáchằng số nguyên kí hiệu —Sử dụng thuậntiệnbằng tên => hằng số nguyên Ví dụ enum Color {Red, Green, Blue}; enum WeekDay { Mon = 2, Tue, Wed, Thu, Fri, Sat, Sun = 1 }; enum { DI_MOTOR1_STARTED = 0x01, DI_MOTOR1_RUNNING = 0x02, DI_MOTOR2_STARTED = 0x04, N Ơ DI_MOTOR2_RUNNING = 0x08, DI_PUMP1_STARTED = 0x10, DI_PUMP1_RUNNING = 0x20, DI_OVERLOADED = 0x40, DI_VALVE1_OPENED = 0x80 }; 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 34 Ch ©
- Sử dụng kiểuliệtkê /* C version */ void main() { enum Color c = Red; /* c = 0 */ C: enum WeekDay d = Tue; /* d = 3 */ Như mộtkiểusố int i=c, j=d; /* i=0, j=3 */ enum Color c2 = i+1; /* c2 = 1 */ nguyên 8 bit int di1 = 0x01; /* OK, but */ int di2 = DI_MOTOR1_STARTED;/* this is better */ ++c; /* c = 1 */ } /* C++ version */ void main() { C++ enum Color c = Red; // c = Red Không còn như WeekDay d = Tue; // OK, d = Tue mộtkiểusố int i=c, j=d; // i=0, j=3 N nguyên! Ơ Color c2 = i+1; // Error! Color c3 = Color(i+1); // OK, c3 = Green int di1 = 0x01; // OK, but int di2 = DI_MOTOR1_STARTED;// this is better ++c; // Error! } 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 35 Ch ©
- 2.4.2 Kiểuhằng (const) Cho phép khai báo như biếnsố, nhưng ₫ượcgángiá trị cố₫ịnh bằng mộthằng số và không thể₫ượcthay ₫ổi => khai báo hằng số void main() { const double pi = 3.1412; // initializing is OK! const int ci = 1; // initializing is OK! ci = 2; // error! ci = 1; // error, too! int i = ci; // const int is a subset of int N const Color cc = Red; Ơ cc = Green; // error const double d; // potential error } 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 36 Ch ©
- 2.4.3 Kiểucon trỏ Con trỏ thựcchấtlàmộtbiếnchứa ₫ịachỉ củamột ₫ối tượng có thể là mộtbiếnhoặcmộthàm. int v = 2; int* p = &v; // p holds the address of v Con trỏ p Vùng nhớ chứa biến CT 0x000127c3 p: &v v: 2 N Ơ chứa ₫ịa chỉ của biến v 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 37 Ch ©
- int i = 1; int* p = &i; // p holds the address of i *p = 2; // i = 2 int j; p = &j; // now p holds the address of j *p = 3; // j = 3, i remains 2 N Ơ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 38 Ch ©
- Ví dụ sử dụng kiểucon trỏ void main() { int i = 0; int* p = &i; // p refers to the addesss of i int j = *p; // j = 0 *p = 2; // now i = 2 p = &j; // now p contains the addess of j *p = 3; // now j = 3, i remains 2 double d = i; // OK, int is compatible to double p = &d; // error, int* isn’t compatible to double* p = (*int)&d; // no compile error, but dangerous, // meaningles type conversion! double* pd=0; // p contains the address 0 *pd = 0; // no compile error, but fatal error pd = &d; // OK N Ơ double* pd2; // p refers to an uncertain address *pd2 = 0; // fatal error pd2 = &d; // OK, pd and pd2 refer to the same addr. } 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 39 Ch ©
- Tóm tắtsơ bộ về con trỏ Con trỏ là mộtbiếnchứa ₫ịachỉ byte ₫ầucủamộtbiếndữ liệu, ₫ượcsử dụng ₫ể truy cậpgiántiếpdữ liệu ₫ó Sau khi khai báo mà không khởitạo, mặc ₫ịnh con trỏ mang một ₫ịachỉ bất ₫ịnh Địachỉ con trỏ mang có thể thay ₫ổi ₫ược => con trỏ có thể mỗi lúc ₫ạidiệnchomộtbiếndữ liệu khác Toán tử lấy ₫ịachỉ củamộtbiến(&) trả về con trỏ vào kiểucủa biến=> thường gán cho biếncon trỏ Toán tử truy nhậpnộidung (*) ápdụng cho con trỏ trả về biến mà con trỏ mang ₫ịachỉ => có thể₫ọchoặcthay₫ổi giá trị của biến ₫ó N Ơ Không bao giờ sử dụng toán tử truy nhậpnội dung, nếucon trỏ chưamangmột ₫ịachỉ ô nhớ mà chương trình có quyềnkiểm soát 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 40 Ch ©
- 2.4.4 Kiểumảng Chỉ số 012 N-1 ₫ịachỉ₫ầu ₫ịachỉ cuối ₫ịachỉ₫ầu-₫ịachỉ cuối = N * kích cỡ mộtphầntử Cấutrúcdữ liệuvới: —Số lượng các phầntử cố₫ịnh — Các phầntử có cùng kiểu N Ơ — Các phầntử₫ượcsắpxếpkế tiếptrongbộ nhớ —Cóthể truy nhậptừng phầntử mộtcáchtự do theo chỉ số hoặctheo₫ịachỉ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 41 Ch ©
- Khai báo mảng Số phầntử củamảng phảilàhằng số nguyên (trong C phảilàmộttrựckiện, trong C++ có thể là kiểu const ) Khai báo không khởitạo: int a[3]; enum {index = 5}; double b[index]; const int N = 2; char c[N]; // C++ only Khai báo vớisố phầntử và khởitạo giá trị các phầntử N Ơ int d[3]= {1, 2, 3}; double e[5]= {1, 2, 3}; char f[4]= {0}; 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 42 Ch ©
- Khai báo mảng (tiếp) Khai báo và khởitạogiátrị các phần tử, số phầntử₫ượctự₫ộng xác ₫ịnh int a[]= {1, 2, 3, 4, 5}; double b[]= {1, 2, 3}; double c[]= {0}; char s[]= {‘a’}; Khai báo mảng nhiềuchiều double M[2][3]; N Ơ int X[2][]={{1,2},{3,4},{5,6}}; short T[2][2]={1,2,3,4,5,6}; 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 43 Ch ©
- Ví dụ sử dụng kiểumảng void main() { int a[5]; // a has 5 elements with uncertain values int b[5]= {1,3,5,7,9}; // 5 elements with initial values double c[]; // error, unspecified size double x = 1.0, y = 2.0; double d[]= {x,y,3.0}; // 3 elements with initial values short n = 10; double v[n]; // error, array size must be a constant! const int m=10; // C++ OK double v2[m]; // C++ OK a[0] = 1; int i= 1; a[i] = 2; a[5] = 6; // no compile error, but fatal error int k = a[5]; // no compile error, but fatal error N a = {1,2,3,4,5}; // error Ơ a = b; // error, cannot assign array int M[2][3]; M[0][1] = 0; M[0][2] = 1; } 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 44 Ch ©
- Mảng ₫ặcbiệt: Chuỗikýtự Trong C/C++, chuỗikýtự không phảilà kiểucơ bản, mà thựcchấtlàmộtmảng Phân biệtchuỗikýtự thường và chuỗiký tự kết0 char city1[]= {'H','A','N',' ','O','I‘}; char city2[]= "HA NOI"; wchar_t city3[]= L"HÀ NOI"; city2[] = “HANOI”; // error Đasố các hàm trong thư việnC làmviệc N Ơ vớichuỗikýtự kết0 Với C++, chuỗikýtự₫ược ₫ịnh nghĩabằng lớp string trong thư việnchuẩn, không sử dụng byte kết0 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 45 Ch ©
- Mảng và con trỏ void main() { int a[5]; // a has 5 elements with // uncertain values int* p; p = a; // p refers to a[0] p = &a[0]; // the same as above *p = 1; // a[0]=1 ++p; // now p points to a[1] *p = 2; // a[1]=2 p++; // now p points to a[2] *p = 3; // a[2]=3 p += 2; // now p points to a[4] *p = 5; // a[4] = 5 N Ơ ++p; // OK, no problem until we dereference it *p = 6; // Now is a BIG BIG problem! a = p; // error, a is like a constant pointer } 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 46 Ch ©
- Mảng và con trỏ (tiếp) void main() { int a[5]; // a has 5 elements with // uncertain values int* p = a; // p points to a[0] p[0] = 1; // a[0]=1 p[1] = 2; // a[1]=2 p+= 2; // now p points to a[2] p[0] = 3; // a[2]=3 p[1] = 4; // a[3]=4 p[3] = 6; // a[5]=6, Now is a BIG BIG problem! } N Ơ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 47 Ch ©
- Tóm lượcvề mảng Mảng là mộttậphợpcácdữ liệu cùng kiểu, sắpxếpliềnkề trong bộ nhớ => các phầntử củamảng Có thể truy cập các phầntử mảng vớibiếnmảng kèm theo chỉ số hoặcvớibiếncon trỏ (theo ₫ịachỉ củatừng phầntử) Số phầntử củamảng là cố₫ịnh (khi khai báo phảilàhằng số), không bao giờ thay ₫ổi ₫ược Biếnmảng (tĩnh) thựcchấtlàmộtcon trỏ hằng, mang ₫ịachỉ củaphầntử₫ầutiên Có thể₫ặt giá trị₫ầuchocácphầntử củamảng qua danh sách khởitạo, không bao giờ gán ₫ượcmảng cho nhau. Nếucầnsao chép hai mảng thì phảisử dụng hàm Không bao giờ₫ượcphéptruynhậpvớichỉ số nằm ngoài phạm N vi, nếuN làsố phầntử thì phạm vi cho phép là từ 0 N-1 Ơ Con trỏ không bao giờ là mộtmảng, nó chỉ có thể mang ₫ịachỉ củamộtmảng và sử dụng ₫ể quảnlýmảng (dù là ₫ộng hay tĩnh) 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 48 Ch ©
- 2.4.5 Kiểu tham chiếu (C++) Một biếnthamchiếulàmột biến ₫ạidiện trực tiếpcho một biến khác (thay cho con trỏ) Ýnghĩasử dụng chủ yếuvề sau trong truyềnthamsố cho hàm void main() { double d = 2.0; double& r = d; // r represents d double *p1 = &d, *p2 = &r; r = 1.0; // OK, d = 1.0 double& r2; // error, r has to be assigned to a var. N Ơ double& r3 = 0; // error, too double d2 = 0; r = d2; // r = 0, d=0 r = 1.0; // r = d = 1, d2 =0 } 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 49 Ch ©
- 2.4.6 Typedef Từ khóa typedef tạoramột tên mớichomộtkiểucó sẵn, không ₫ịnh nghĩamộtkiểumới Ý nghĩa: ₫ưa tên mớidễ nhớ, phù hợpvới ứng dụng cụ thể, dễ thay ₫ổivề sau typedef float REAL; typedef int AnalogValue; typedef int Vector[10]; typedef AnalogValue AnalogModule[8]; typedef int* IPointer; N AnalogValue av1 = 4500; Ơ Vector x = {1,2,3,4,5,6,7,8,9,10}; AnalogModule am1 = {0}; IPointer p = &av1; 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 50 Ch ©
- 2.5 Định nghĩa kiểudữ liệumới Cấutrúc(struct): Tậphợpnhững dữ liệuhỗnhợp, truy nhập theo tên (biếnthànhviên). Thôngdụng nhất trong C, ý nghĩa ₫ượcmở rộng trong C++ Hợpnhất(union): Mộttênkiểu chung cho nhiềudữ liệu khác nhau (chiếmcùngchỗ trong bộ nhớ). Ít thông dụng trong cả C và C++ Lớp(class): Chỉ có trong C++, mở rộng struct cũ thêm những hàm thành viên. N Ơ 2004, HOÀNG MINH S ương 2: Các yếutố cơ bảncủaC vàC++ © AC - HUT 51 Ch ©