Bài giảng Cơ sở lập trình - Chương 6: Kiểu con trỏ
Số trang: 50
Loại file: pptx
Dung lượng: 331.89 KB
Lượt xem: 19
Lượt tải: 0
Xem trước 5 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Cơ sở lập trình Chương 6 Kiểu con trỏ nhằm trình bày về con trỏ và địa chỉ, khai báo con trỏ, con trỏ và mảng một chiều, con trỏ và mảng nhiều chiều, mảng các con trỏ....Bài giảng được trình bày khoa học, súc tích giúp các bạn sinh viên tiếp thu bài học nhanh.
Nội dung trích xuất từ tài liệu:
Bài giảng Cơ sở lập trình - Chương 6: Kiểu con trỏ 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 4/23/14 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. 4/23/14 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 4/23/14 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. 4/23/14 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 4/23/14 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 4/23/14 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; 4/23/14 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); 4/23/14 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. 4/23/14 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; } 4/23/14 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; } 4/23/14 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; } 4/23/14 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 ...
Nội dung trích xuất từ tài liệu:
Bài giảng Cơ sở lập trình - Chương 6: Kiểu con trỏ 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 4/23/14 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. 4/23/14 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 4/23/14 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. 4/23/14 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 4/23/14 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 4/23/14 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; 4/23/14 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); 4/23/14 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. 4/23/14 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; } 4/23/14 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; } 4/23/14 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; } 4/23/14 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ìm kiếm theo từ khóa liên quan:
Kiểu con trỏ Cơ sở lập trình Tài liệu cơ sở lập trình Ngôn ngữ lập trình C Bài giảng cơ sở lập trình chương 6 Khai báo con trỏGợi ý tài liệu liên quan:
-
101 trang 198 1 0
-
Giáo trình Lập trình C căn bản: Phần 2
71 trang 163 0 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 146 0 0 -
161 trang 129 1 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 114 0 0 -
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 trang 108 0 0 -
Đồ án vi xử lý đề tài : nghiên cứu thiết kế mạch đo khoảng cách sử dụng vi điều khiển Pic 16F887
45 trang 91 1 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 2 - Quách Tuấn Ngọc
210 trang 85 0 0 -
ĐỀ CƯƠNG THI TRẮC NGHIỆM MÔN LẬP TRÌNH CÓ CẤU TRÚC
43 trang 56 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Phần 1 - ThS. Hoàng Thế Phương
128 trang 52 0 0