Bài giảng Ngôn ngữ lập trình C/C++ (Tuần 5,6)
Con trỏ và số học địa chỉ
Con trỏ
Con trỏ và mảng
Hàm và chương trình
Khai báo và sử dụng hàm
Các cách truyền đối cho hàm
Tóm tắt nội dung Bài giảng Ngôn ngữ lập trình C/C++ (Tuần 5,6), để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
NGÔN NGỮ LẬP TRÌNH C/C++ (Bài giảng tuần 5-6) Nội dung Con trỏ và số học địa chỉ Con trỏ Con trỏ và mảng Hàm và chương trình Khai báo và sử dụng hàm Các cách truyền đối cho hàm Con trỏ và số học địa chỉ Khái niệm con trỏ Con trỏ là một biến chứa địa chỉ của một biến khác, hoặc địa chỉ của một hàm Nếu p là con trỏ chứa địa chỉ của biến x ta gọi p trỏ tới x và x được trỏ bởi p Để lấy địa chỉ của biến x, ta dùng phép toán &: &x Để lấy nội dung của con trỏ, ta dùng phép toán *: *p Ví dụ về con trỏ, phép toán & và * int a=2; // a là một biến integer int *p; // p là một con trỏ p = &a; // p chứa địa chỉ của a cout , >=, ; // cấp phát 1 phần tử p = new [n] ; // cấp phát n phần tử Ví dụ: int *p, *q; p = new int; // Cấp phát 1 phần tử q = new int[10]; // Cấp phát 10 phần tử Giải phóng bộ nhớ đã cấp phát Để cấp phát bộ nhớ cho con trỏ, ta dùng chỉ thị delete: delete p; // nếu p được cấp phát 1 phần tử delete[] p; // nếu p được cấp phát n>1 phần tử Ví dụ: int *p, *q; p = new int; // Cấp phát 1 phần tử q = new int[10]; // Cấp phát 10 phần tử delete p; // Giải phóng p delete[] q; // Giải phóng q Con trỏ và mảng một chiều Con trỏ trỏ đến mảng cũng tương tự trỏ đến các biến khác, tức gán địa chỉ của mảng (chính là tên mảng) cho con trỏ Địa chỉ của mảng là địa chỉ của thành phần đầu tiến (0) nên a+i sẽ là địa chỉ thành phần thứ i của mảng Giả sử có mảng int a[10]: a[i] chính là *(a+i) a+i chính là &a[i] Con trỏ và mảng hai chiều Ví dụ: float a[2][3], *p; p = a; a[i][j] ~ *(p+3*i+j) Mảng con trỏ Khai báo: *[]; Ví dụ: int *a[10]; // Mảng 10 con trỏ số nguyên Ví dụ: khai báo tham số của hàm main: main(argc, argv) int argc; char *argv[]; Hàm Khái niệm về hàm Hàm là một chương trình con Hàm có thể nhận hoặc không nhận đối số Hàm có thể trả lại kết quả hoặc không Một chương trình C chứa ít nhất một hàm (main) và có thể có nhiều hàm khác Hàm giúp cho việc phân đoạn chương trình thành những môđun độc lập Đặc trưng của hàm Nằm trong hoặc ngoài văn bản có chương trình gọi đến hàm. Trong một văn bản có thể chứa nhiều hàm, Được gọi từ chương trình chính (main), từ hàm khác hoặc từ chính nó (đệ quy), Không lồng nhau. Có 3 cách truyền giá trị: Truyền theo tham trị, tham biến và tham trỏ. Khai báo hàm Khai báo hàm: (d/s kiểu đối) ; Ví dụ: int myfunction(int, long); int rand100() ; void showtext(char *); void nothing(); Định nghĩa hàm (danh sách tham đối hình thức) { khai báo cục bộ của hàm ; // chỉ dùng cho hàm này dãy lệnh của hàm ; return (biểu thức trả về); // có thể nằm đâu đó trong dãy lệnh. } Ví dụ double luythua(float x, int n) { int i ; // biến chỉ số double kq = 1; // để lưu kết quả for (i=1; i(danh sách tham đối thực sự); Ví dụ: Viết và thực hiện một chương trình đơn giản có sử dụng lời gọi hàm Hàm với đối ngầm định Khai báo: (d1, …, dn, dnd1=gt1, …, dndm=gtm); Các đối ngầm định phải được khai báo liên tục và nằm ở cuối danh sách đối Ví dụ: int function(int, char, int=0, float=1.0); int=0 và float=1.0 chỉ ra hai đối với giá trị ngầm định Khai báo hàm trùng tên (Overlay) int max(int a, int b) { return (a > b) ? a: b ; } int max(double a, double b) { return (a > b) ? a: b ; } Biến tham chiếu Biến tham chiếu int i; int &j=i; // j là một cách tham chiếu khác // của biến i j = 5; // Sau lệnh gán này i cũng có giá trị 5 Biến tham chiếu phải được khởi tạo khi khai báo Các cách truyền đối cho hàm Truyền theo tham trị Truyền theo tham chiếu Truyền theo con trỏ Truyền theo tham trị void swap1(int x, int y) { int t ; t = x ; x = y ; y = t ; } main() { int x=5, y=6; cout << “x = “ << x << “ y = “ << y << endl; swap1(x, y); cout << “x = “ << x << “ y = “ << y << endl; } Truyền theo tham trỏ void swap2(int *x, int *y) { int t ; t = *x ; *x = *y ; *y = t ; } main() { int x=5, y=6; cout << “x = “ << x << “ y = “ << y << endl; swap2(&x, &y); cout << “x = “ << x << “ y = “ << y << endl; } Truyền theo tham chiếu void swap3(int &x, int &y) { int t ; t = x ; x = y ; y = t ; } main() { int x=5, y=6; cout << “x = “ << x << “ y = “ << y << endl; swap3(x, y); cout << “x = “ << x << “ y = “ << y << endl; } Các vấn đề cần nhớ Con trỏ: Cách khai báo, sử dụng, cấp phát và giải phóng bộ nhớ Mối liên quan giữa con trỏ và mảng Khai báo, xây dựng và sử dụng hàm Phân biệt các cách truyền đối khác nhau cho hàm Đối ngầm định, hàm trùng tên Bài tập Các bài tập từ số 1 đến số 42 của chương 4 (Từ trang 140-144)
File đính kèm:
- Bài giảng Ngôn ngữ lập trình CC++ (Tuần 5,6).ppt