Chương 3 cung cấp cho người học những kiến thức về lập trình con trỏ như: Khái niệm về con trỏ, khai báo con trỏ, các phép toán trên con trỏ, con trỏ và mảng một chiều, con trỏ hàm,... Mời các bạn cùng tham khảo.
Chương Lập trình trỏ TRẦN MINH THÁI Email: minhthai@itc.edu.vn Website: www.minhthai.edu.vn Cập nhật: 02 tháng 04 năm 2015 Nội dung #2 Khái niệm Khai báo Các phép toán trỏ Con trỏ mảng chiều Con trỏ hàm Bài tập Biến tĩnh biến động #3 Các biến khai báo bên bên hàm Biến khai báo hàm biến toàn cục có vị trí nhớ cố định Biến khai báo khối lệnh {}/ hàm: Động không dùng static Được cấp phát chương trình thực thi vào khối Bộ nhớ giải phòng khỏi khối Địa biến #4 Thông tin biến bao gồm: Tên biến Kiểu liệu biến Giá trị biến Mỗi biến lưu trữ vị trí xác định nhớ, kích thước biến có nhiều byte máy tính cấp phát dãy byte liên tiếp nhau, địa biến lưu byte dãy byte Địa biến #5 Ví dụ khai báo: float x; int a; Địa biến x Byte Các ô nhớ biến x Địa biến a Byte 100 Các ô nhớ Byte biến a Byte 101 Byte Byte 102 Byte Byte 103 Địa biến #6 Địa biến luôn số nguyên (hệ hexa) cho dù biến chứa giá trị số nguyên, số thực, ký tự, … Cách lấy địa biến: & tênbiến Ví dụ: void main() Kết { int x=7; Dia chi cua bien x = 0014FC00 float y=10.5; Dia chi cua bien y = 0014FBF4 printf("Dia chi cua bien x = %x\n", &x); printf("Dia chi cua bien y = %x“, &y); } Biến trỏ #7 Biến trỏ biến để chứa địa chứa liệu, có nhiều loại trỏ tùy thuộc vào địa loại kiểu biến Cú pháp Kiểu liệu * TênConTrỏ; Ví dụ: int *px; float *pm; Lấy giá trị trỏ *TênConTrỏ; Con trỏ - Ví dụ #8 void main() Kết { Gia tri cua px = 10 Gia tri cua pa = 14.5 int *px, y; float *pa, b; y=10; Lấy địa biến y gán vào px b=14.5; px=&y; pa=&b; printf("Gia tri cua px = %d\n", *px); printf("Gia tri cua pa = %f", *pa); } Lấy giá trị trỏ px Con trỏ - Ví dụ #9 void main() { Dia chi cua bien px = d7f7dc int *px, y; Dia chi cua bien b = d7f7c4 float *pa, b; Dia chi cua bien pa = d7f7c4 y=10; b=14.5; px=&y; pa=&b; printf("Dia chi cua bien y = %x\n", &y); printf("Dia chi cua bien px = %x\n", px); printf("Dia chi cua bien b = %x\n", &b); printf("Dia chi cua bien pa = %x\n", pa); } Dia chi cua bien y = d7f7dc Sử dụng biến trỏ #10 void main() !!!Chưa cấp phát nhớ trước sử dụng { int *px; printf("Nhap vao gia tri cho tro px: "); scanf("%d", px); printf("Gia tri cua px = %d", *px); } Sử dụng biến trỏ #11 void ViDu4() { Cấp phát nhớ cho px int *px; px = (int *)calloc(1, sizeof(int)); printf("Nhap vao gia tri cho tro px: "); scanf("%d", px); printf("Gia tri cua px = %d", *px); } Kết Nhap vao gia tri cho tro px: 16 Gia tri cua px = 16 Cấp phát giải phóng vùng nhớ #12 Biến trỏ phải cấp phát vùng nhớ trước sử dụng Cách 1: dùng calloc //khai báo trỏ p int *p; //cấp phát 100 ô nhớ ô chiếm 2bytes p=(int *) calloc (100, sizeof (int)); Cấp phát giải phóng vùng nhớ #13 Biến trỏ phải cấp phát vùng nhớ trước sử dụng Cách 2: dùng malloc //Khai báo trỏ px int *px; //Cấp phát 100 ô nhớ kiểu int cho trỏ px px = (int *) malloc (100); Sau sử dụng xong giải phóng vùng nhớ bằng hàm free free(p) ; // giải phóng vùng nhớ cho trỏ p Cấp phát giải phóng vùng nhớ #14 void main() { int *px; px = (int *)malloc(1); printf("Nhap vao gia tri cho tro px: "); scanf("%d", px); printf("Gia tri cua px = %d", *px); free(px); } Giải phóng trỏ px Con trỏ mảng chiều #15 int a[7]; int *px; px = a; //px trỏ tới phần tử thứ px = px + 4; //px trỏ tới phần tử thứ px a[0] a[1] a[2] a[3] a[4] a[5] a[6] Con trỏ mảng chiều #16 void NhapMang(int *a, int n) { for(int i=0; i