Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
808 KB
Nội dung
1 CHƯƠNG 6: KIỂUCONTRỎ 6.1 Contrỏ và địa chỉ 6.2 Khai báo con trỏ, các phép toán trên contrỏ 6.3 Contrỏ và mảng một chiều 6.4 Contrỏ và mảng nhiều chiều 6.5 Mảng contrỏ 6.6 Cấp phát bộ nhớ động 2 Khái niệm contrỏ Một contrỏ 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 float x=12.5; //x có giá trị là 12.5 Và 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. 3 Contrỏ và địa chỉ Phép lấy địa chỉ của 1 biến Kí hiệu: & Cách sử dụng:&<Tên biến> Ví dụ: int *pi=&a; // pi giữ địa chỉ của các biến nguyên a Phép toán lấy giá trị tại một địa chỉ mà một contrỏ đang trỏ tới Kí hiệu: * Cách sử dụng: *<Tên con trỏ> Ví dụ: int a= 10; // biến a có giá trị 10 int *pi; pi =&a; //pi giữ địa chỉ của biến a *pi là giá trị của a và bằng 10 4 Contrỏ và địa chỉ a 25 x y 25 int a=25, x; int *y; x=a; y=&a; y Ví dụ 1: 5 Contrỏ và địa chỉ int a, *p; a=25; p=&a; m=*p ; Cho biết Giá trị của m ? Ví dụ 2: 6 Contrỏ 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ớ contrỏ 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à 12 Lưu ý: Việc sử dụng và thao tác trên giá trị tại địa chỉ của contrỏ chỉ được thực hiện sau khi contrỏ đã có địa chỉ 7 Contrỏ 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 contro pa tro toi %p",*pa); printf("\nNoi dung cua o nho contro 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(); } 8 C 9 Khai báo contrỏ Khai báo Giống như mọi biến khác, biến contrỏ muốn sử dụng cũng cần phải được khai báo Ví 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. <kiểu dữ liệu> *<tên biến con trỏ>; char *ch1, *ch2; int *p1, p2; 10 Khai báo contrỏ Sử dụng từ khóa typedef Ví dụ typedef <kiểu dữ liệu> *<tên kiểucon trỏ>; <tên kiểucon trỏ> <tên biến con trỏ>; typedef int *pint; int *p1; pint p2, p3; [...]... trên contrỏ 20 Các phép toán trên contrỏ 21 Mảng contrỏ Mỗi biến contrỏ là một biến đơn Ta có thể tạo mảng của các contrỏ với mỗi phần tử của mảng là một contrỏ Cú pháp: *Tên mảng contrỏ [số phần tủ]; 22 Mảng contrỏ int *p[5]; int a=6; p[0] = &a; p[2] = p[0]; int b; b = *p[0]; P[0] p a P[1] P[2] 100 6 100 b 23 P[3] P[4] Cấp phát bộ nhớ động Cấp phát vùng nhớ cho biến con trỏ:.. .Con trỏ NULL Khái niệm Contrỏ NULL là contrỏ không chứa địa chỉ nào Khác với contrỏ chưa được khởi tạo int int int int n; *p1 = &n; *p2; *p3 = NULL; NULL 11 Contrỏ và mảng 1 chiều Giữa mảng và contrỏ 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 contrỏ – Tên của một mảng tương... printf("\nNoi dung cua con tro p printf("%d",a[i][j]); sau khi tang len 1 la\n"); for(i=0;i . 1 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ều 6.4 Con trỏ và mảng nhiều chiều 6.5 Mảng con trỏ 6.6 Cấp phát. pa=&a; pb=&b; printf("
Noi dung cua o nho con tro pa tro toi %p",*pa); printf("
Noi dung cua o nho con tro pb tro toi %p",*pb); *pa=20; *pb=30; printf("
Gia. biến con trỏ>; char *ch1, *ch2; int *p1, p2; 10 Khai báo con trỏ Sử dụng từ khóa typedef Ví dụ typedef <kiểu dữ liệu> *<tên kiểu con trỏ>; <tên kiểu con trỏ> <tên biến con