Bài giảng cơ sở lập trình - Trường học viên Ngân Hàng Hà Nội - Chương 6
lượt xem 7
download
Con trỏ là một biến dùng để chứa địa chỉ. Có nhiều kiểu con trỏ tương ứng với nhiều loại địa chỉ. Khi gán địa chỉ của 1 biến cho 1 biến con trỏ, mọi sự thay đổi trên nội dung ô nhớ con trỏ chỉ tới sẽ làm giá trị của biến thay đổi theo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng cơ sở lập trình - Trường học viên Ngân Hàng Hà Nội - Chương 6
- Chương 6 KIỂU CON TRỎ Khoa Hệ thống thông tin quản lý Hà Nội – 2013
- Nội dung 1 Con trỏ và địa chỉ 2 Khai báo con trỏ 3 Con trỏ và mảng một chiều 4 Con trỏ và mảng nhiều chiều 5 Mảng các con trỏ 6 Con trỏ hàm 7 Cấp phát bộ nhớ động 11/7/13 Chương 6-Kiểu con trỏ 2
- 1. Con trỏ và địa chỉ o Ví dụ: float a=10.12; n Xác định một biến có tên a có kiểu float và có giá trị 10.12. n Máy cấp phát cho x một vùng nhớ gồm 4 byte liên tiếp. n Địa chỉ của biến là số thứ tự của byte đầu tiên o Có nhiều kiểu địa chỉ khác nhau tương ứng với các kiểu biến khác nhau. 11/7/13 Chương 6-Kiểu con trỏ 3/50
- Con trỏ và địa chỉ o Con trỏ là một biến dùng để chứa địa chỉ. Có nhiều kiểu con trỏ tương ứng với nhiều loại địa chỉ. n Ví dụ: o Con trỏ kiểu int chứa địa chỉ các biến kiểu int… o *a là giá trị được lưu trong bộ nhớ có địa chỉ a o &a là địa chỉ bộ nhớ chứa giá trị a 11/7/13 Chương 6-Kiểu con trỏ 4/50
- 2. Khai báo con trỏ o Khai báo trực tiếp *; Trong đó: * là toán tử con trỏ n Ví dụ: int *p1,m,n; p1=&n; *p1=10; /* ô nhớ do con trỏ p1 trỏ đến được gán giá trị 10 */ o Chú ý: Khi gán địa chỉ của 1 biến cho 1 biến con trỏ, mọi sự thay đổi trên nội dung ô nhớ con trỏ ch ỉ tới sẽ làm giá trị của biến thay đổi theo. n Ví dụ: int *p2,a=10; p2=&a; *p2=*p2+3; Khi đó a sẽ có giá trị 13. 11/7/13 Chương 6-Kiểu con trỏ 5/50
- Khai báo con trỏ (tt) o Khai báo gián tiếp typedef *; ; n Ví dụ typedef int *pint; int *p1; pint p2, p3; o Kích thước của con trỏ n Con trỏ chỉ lưu địa chỉ nên kích thước của mọi con trỏ là như nhau: o Môi trường MD-DOS (16 bit): 2 bytes o Môi trường Windows (32 bit): 4 bytes 11/7/13 Chương 6-Kiểu con trỏ 6/50
- Con trỏ NULL o Khái niệm n Con trỏ NULL là con trỏ không trỏ và đâu cả. n Khác với con trỏ chưa được khởi tạo. int n; int *p1 = &n; int *p2; // unreferenced local varialbe int *p3 = NULL; NULL 11/7/13 Chương 6-Kiểu con trỏ 7/50
- Khởi tạo kiểu con trỏ o Khởi tạo = &; n Khi mới khai báo, biến con trỏ được đặt ở địa chỉ nào đó (không biết trước). chứa giá trị không xác định trỏ đến vùng nhớ không biết trước. n Đặt địa chỉ của biến vào con trỏ (toán tử &) o Ví dụ int a, b; int *pa = &a, *pb; pb = &b; 11/7/13 Chương 6-Kiểu con trỏ 8/50
- Sử dụng con trỏ o Truy xuất đến ô nhớ mà con trỏ trỏ đến n Con trỏ chứa một số nguyên chỉ địa chỉ. n Sử dụng toán tử *. o Ví dụ int n=10; int *p; printf("\nDia chi cua n: %p",&n); printf("\nGia tri cua n: %d",n); p=&n; //Con tro p tro toi n printf("\nDia chi cua con tro: %p",&p); printf("\nGia tri cua con tro: %p",p); printf("\nGia tri duoc tro toi la: %d",*p); 11/7/13 Chương 6-Kiểu con trỏ 9/50
- Sử dụng con trỏ (tt) o Sử dụng tên con trỏ n Giá trị của con trỏ (địa chỉ của biến) được sử dụng trong biểu thức n Nếu tên con trỏ ở bên trái toán tử gán thì giá tr ị của biểu thức bên phải phải là địa chỉ. n Ví dụ: float a,*p,*q; p=&a; q=p; è Kết quả con trỏ q chứa địa chỉ của biến a o Sử dụng dạng khai báo n Ví dụ: float x,*px; px=&x; //px trỏ tới x n Nếu con trỏ px trỏ tới biến x thì cách viết x và *px là tương đương trong mọi ngữ cảnh. 11/7/13 Chương 6-Kiểu con trỏ 10/50
- Các cách truyền đối số o Truyền giá trị (tham trị) #include void hoanvi(int x, int y); main() { int a = 5; b = 6; hoanvi(a, b); printf(“a = %d, b = %d”, a, b); } void hoanvi(int x, int y) { int t = x; x = y; y = t; } 11/7/13 Chương 6-Kiểu con trỏ 11/50
- Các cách truyền đối số o Truyền địa chỉ (con trỏ) #include void hoanvi(int *x, int *y); main() { int a = 2912; b = 1706; hoanvi(&a, &b); printf(“a = %d, b = %d”, a, b); } void hoanvi(int *x, int *y) { int t = *x; *x = *y; *y = t; } 11/7/13 Chương 6-Kiểu con trỏ 12/50
- Các cách truyền đối số o Truyền tham chiếu (C++) #include void hoanvi(int &x, int &y); main() { int a = 2912; b = 1706; hoanvi(a, b); printf(“a = %d, b = %d”, a, b); } void hoanvi(int &x, int &y) { int t = x; x = y; y = t; } 11/7/13 Chương 6-Kiểu con trỏ 13/50
- Một số lưu ý o Một số lưu ý n Con trỏ là khái niệm quan trọng và khó nhất trong C. n Nắm rõ quy tắc sau, ví dụ int a, *pa = &a; o *pa và a đều chỉ nội dung của biến a. o pa và &a đều chỉ địa chỉ của biến a. n Không nên sử dụng con trỏ khi chưa được khởi tạo. Kết quả sẽ không lường trước được. n Ví dụ: int *pa; *pa = 1904; 11/7/13 Chương 6-Kiểu con trỏ 14/50
- 3. Con trỏ và mảng một chiều o Mảng một chiều int array[3]; n Tên mảng array là một hằng con trỏ không thể thay đổi giá trị của hằng này. n array là địa chỉ đầu tiên của mảng array == &array[0] 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … array 11/7/13 Chương 6-Kiểu con trỏ 15/50
- Con trỏ và mảng một chiều o Con trỏ đến mảng một chiều int array[3], *parray; parray = array; // Cách 1 parray = &array[0]; // Cách 2 18 19 1A 1B 1C 1D 1E 1F … 0B 00 00 00 … parray 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … array 11/7/13 Chương 6-Kiểu con trỏ 16/50
- Phép toán số học trên con trỏ o Phép cộng (tăng) n + n + n * sizeof() n Có thể sử dụng toán tử gộp += hoặc ++ p = array +2 +1 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … int array[3]; 11/7/13 Chương 6-Kiểu con trỏ 17/50
- Phép toán số học trên con trỏ o Phép trừ (giảm) n – n – n * sizeof() n Có thể sử dụng toán tử gộp –= hoặc – – p = &array[2] –2 –1 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … int array[3]; 11/7/13 Chương 6-Kiểu con trỏ 18/50
- Phép toán số học trên con trỏ o Phép toán tính khoảng cách giữa 2 con trỏ n *p1, *p2; n p1 – p2 cho ta khoảng cách (theo số phần tử) giữa hai con trỏ (cùng kiểu) p1 = array p2 = &array[2] p1 – p2= (0B – 13)/sizeof(int) = –2 p2 – p1= (13 – 0B)/sizeof(int) = +2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … int array[3]; 11/7/13 Chương 6-Kiểu con trỏ 19/50
- Phép toán số học trên con trỏ o Các phép toán khác n Phép so sánh: So sánh địa chỉ giữa hai con trỏ (thứ tự ô nhớ) o == != o > >= o <
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cơ sở lập trình - Chương 3: Các cấu trúc điều khiển
56 p | 137 | 22
-
Bài giảng Cơ sở lập trình 1: Giới thiệu môn học - Lê Quý Tài
9 p | 132 | 8
-
Bài giảng Cơ sở lập trình: Chương 1 - Lê Viết Mẫn
55 p | 73 | 5
-
Bài giảng Cơ sở lập trình Csharp: Bài 4 - Cấu trúc lặp
17 p | 79 | 4
-
Bài giảng Cơ sở lập trình: Chương 1 - Thuật toán và thuật giải
30 p | 14 | 4
-
Bài giảng Cơ sở lập trình: Chương 2 - Tổng quan về lập trình máy tính
14 p | 7 | 3
-
Bài giảng Cơ sở lập trình: Chương 4 - Các cấu trúc điều khiển
41 p | 14 | 3
-
Bài giảng Cơ sở lập trình - Trường ĐH Thương mại
108 p | 41 | 3
-
Bài giảng Cơ sở lập trình: Chương 1 - Khái niệm lập trình
428 p | 17 | 3
-
Bài giảng Cơ sở lập trình: Các phần tử cơ bản của ngôn ngữ C
55 p | 9 | 2
-
Bài giảng Cơ sở lập trình: Kiểu cấu trúc
26 p | 7 | 2
-
Bài giảng Cơ sở lập trình: Kiểu chuỗi ký tự
21 p | 4 | 2
-
Bài giảng Cơ sở lập trình: Kiểu con trỏ
50 p | 3 | 2
-
Bài giảng Cơ sở lập trình: Kiểu dữ liệu mảng
54 p | 5 | 2
-
Bài giảng Cơ sở lập trình: Các khái niệm cơ bản về lập trình
20 p | 7 | 2
-
Bài giảng Cơ sở lập trình: Các cấu trúc điều khiển trong ngôn ngữ C
38 p | 9 | 2
-
Bài giảng Cơ sở lập trình: Chương trình con
22 p | 3 | 2
-
Bài giảng Cơ sở lập trình: Kiểu tập tin
32 p | 3 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn