6.1 Con trỏ và địa chỉ
6.2 Khai báo con trỏ, các phép toán trên con trỏ
6.3 Con trỏ và mảng một chiều
6.4 Con trỏ và mảng nhiều chiều
6.5 Mảng con trỏ
6.6 Cấp phát bộ nhớ động
29 trang |
Chia sẻ: quynhsim | Lượt xem: 354 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng môn Toán lớp 12 - Chương 6: Kiểu con trỏ, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 6: KIỂU CON TRỎ 6.1 Con trỏ và địa chỉ6.2 Khai báo con trỏ, các phép toán trên con trỏ6.3 Con trỏ và mảng một chiều6.4 Con trỏ và mảng nhiều chiều6.5 Mảng con trỏ 6.6 Cấp phát bộ nhớ động1Khái niệm con trỏ Một con trỏ là một biến chứa địa chỉ ô nhớ. Địa chỉ này là vị trí của một đối tượng khác trong bộ nhớ.Ví du:float x; //x là một biến có kiểu floatx=12.5; //x có giá trị là 12.5Và lúc này, biến x chiếm 4 ô nhớ liên tiếp, giả sử mỗi ô nhớ có kích thước 1 byte.2Con trỏ và địa chỉPhép lấy địa chỉ của 1 biếnKí hiệu: &Cách sử dụng:&Ví dụ: int *pi=&a; // pi giữ địa chỉ của các biến nguyên aPhép toán lấy giá trị tại một địa chỉ mà một con trỏ đang trỏ tớiKí hiệu: *Cách sử dụng: *Ví dụ:int a= 10; // biến a có giá trị 10int *pi;pi =&a; //pi giữ địa chỉ của biến a*pi là giá trị của a và bằng 10 3Con trỏ và địa chỉ a25xy25int a=25, x;int *y;x=a;y=&a; yVí dụ 1:4Con trỏ và địa chỉ int a, *p; a=25; p=&a; m=*p ; Cho biết Giá trị của m ?Ví dụ 2:5Con trỏ và địa chỉLưu ý: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.Khi ta khai báo:int a=10;int *pi;pi=&a; // pi giữ địa chỉ biến a*pi=*pi +2; sẽ làm cho biến a có giá trị là 12Lưu ý: Việc sử dụng và thao tác trên giá trị tại địa chỉ của con trỏ chỉ được thực hiện sau khi con trỏ đã có địa chỉ6Con trỏ và địa chỉint main(){ int a,b,*pa,*pb; a=2;b=3; printf("Gia tri cua bien a %d, gia tri cua bien b %d",a,b); pa=&a; pb=&b; printf("\nNoi dung cua o nho con tro pa tro toi %p",*pa); printf("\nNoi dung cua o nho con tro pb tro toi %p",*pb); *pa=20; *pb=30; printf("\nGia tri cua bien a sau khi thay doi la %d",a); printf("\nGia tri cua bien b sau khi thay doi la %d",b); getch();}7C8Khai báo con trỏKhai báoGiống như mọi biến khác, biến con trỏ muốn sử dụng cũng cần phải được khai báoVí dụ ch1 và ch2 là biến con trỏ, trỏ tới vùng nhớ kiểu char (1 byte). p1 là biến con trỏ, trỏ tới vùng nhớ kiểu int (4 bytes) còn p2 là biến kiểu int bình thường. *;char *ch1, *ch2;int *p1, p2;9Khai báo con trỏSử dụng từ khóa typedefVí dụtypedef *; ;typedef int *pint;int *p1;pint p2, p3;10Con trỏ NULLKhái niệmCon trỏ NULL là con trỏ không chứa địa chỉ nào.Khác với con trỏ chưa được khởi tạo.NULLint n;int *p1 = &n;int *p2; int *p3 = NULL;11Con trỏ và mảng 1 chiều Giữa mảng và con trỏ có một sự liên hệ rất chặt chẽ:Những phần tử của mảng được xác định bằng chỉ số trong mảng và cũng có thể được xác định qua biến con trỏ. Tên của một mảng tương đương với địa chỉ phần tử đầu tiên của nó, tương tự một con trỏ tương đương với địa chỉ của phần tử đầu tiên mà nó trỏ tới.Kiểu mảngVí dụKiểu Con trỏVí dụ&[0] &A[0] hoặc A p& [] &A[i] + P+i[] A[i]*( + ) *(p+i)12Con trỏ và mảng 1 chiềuchar ch[10], *p;p = ch; p được gán địa chỉ của phần tử đầu tiên của mảng ch. p = ch; Để lấy giá trị phần tử thứ 3 trong mảng ch, ta dùng một trong 2 cách sau: ch[2] hoặc *(p+2).Ví dụ 1:13Con trỏ và mảng 1 chiềuNumbersint Numbers[5];p= Numbers;int *p;p*p = 10;10pp++;*p = 20;20p = &numbers[2];p*p = 30;20pp3050p = numbers;*(p+4) = 50;p14Con trỏ và mảng 1 chiềuvoid nhapmang(int *a,int &n){ int i; printf("nhap so phan tu cua mang"); scanf("%d",&n); for(i=0;i *Tên mảng con trỏ [số phần tủ];22Mảng con trỏ pa100int *p[5];int a=6;p[0] = &a; 100p[2] = p[0]; 1006int b;bb = *p[0];6P[0]P[1]P[2]P[3]P[4]23Cấp phát bộ nhớ độngCấp phát vùng nhớ cho biến con trỏ: Các hàm: malloc(), calloc(), free()24Cấp phát bộ nhớ độngGiải phóng vùng nhớ cho biến con trỏ25Con trỏ và tham số hình thức của hàm26Con trỏ và tham số hình thức của hàmVí dụ viết hàm hoán vị:27Con trỏ và tham số hình thức của hàm28C29
File đính kèm:
- Test.ppt