Bài giảng kỹ thuật lập trình bài 10 phạm đình sắc

14 155 0
Bài giảng kỹ thuật lập trình  bài 10   phạm đình sắc

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trường Cao đẳng Kỹ thuật Công nghệ Đồng Nai Khoa Cơng nghệ thơng tin NHẬP MƠN LẬP TRÌNH Phạm Đình Sắc dinhsac@gmail.com CON TRỎ (CƠ BẢN) VC VC && BB BB Nội dung Khái niệm cách sử dụng Các cách truyền đối số cho hàm Con trỏ mảng chiều Con trỏ cấu trúc NMLT - Con trỏ VC VC && BB BB Khai báo trỏ Khai báo  Giống biến khác, biến trỏ muốn sử dụng cần phải khai báo *; Ví dụ char *ch1, *ch2; int *p1, p2;  ch1 ch2 biến trỏ, trỏ tới vùng nhớ kiểu char (1 byte)  p1 biến trỏ, trỏ tới vùng nhớ kiểu int (2 bytes) cịn p2 biến kiểu int bình thường NMLT - Con trỏ VC VC && BB BB Con trỏ NULL Khái niệm  Con trỏ NULL trỏ không trỏ vào đâu  Khác với trỏ chưa khởi tạo int int int int n; *p1 = &n; *p2; // unreferenced local varialbe *p3 = NULL; NULL NMLT - Con trỏ VC VC && BB BB Khởi tạo kiểu trỏ Khởi tạo  Khi khai báo, biến trỏ đặt địa (không biết trước)  chứa giá trị không xác định  trỏ đến vùng nhớ trước  Đặt địa biến vào trỏ (toán tử &) = &; Ví dụ int a, b; int *pa = &a, *pb; pb = &b; NMLT - Con trỏ VC VC && BB BB Sử dụng trỏ Truy xuất đến ô nhớ mà trỏ trỏ đến  Con trỏ chứa số nguyên địa  Vùng nhớ mà trỏ đến, sử dụng tốn tử * Ví dụ int a = 5, *pa printf(“%d\n”, printf(“%d\n”, printf(“%d\n”, = &a; pa); // Giá trị biến pa *pa); // Giá trị vùng nhớ pa trỏ đến &pa); // Địa biến pa 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … 05 00 00 00 a 0B 00 00 00 pa … NMLT - Con trỏ VC VC && BB BB Kích thước trỏ Kích thước trỏ char *p1; int *p2; float *p3; double *p4; …  Con trỏ lưu địa nên kích thước trỏ nhau: • Mơi trường MD-DOS (16 bit): bytes • Mơi trường Windows (32 bit): bytes VC VC && BB BB NMLT - Con trỏ NMLT - Con trỏ Các cách truyền đối số Truyền giá trị (tham trị) #include void hoanvi(int x, int y); void 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; } VC VC && BB BB Các cách truyền đối số Truyền tham chiếu #include void hoanvi(int &x, int &y); void 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; } VC VC && BB BB NMLT - Con trỏ NMLT - Con trỏ 10 Các cách truyền đối số Truyền địa (con trỏ) #include void hoanvi(int *x, int *y); void 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; } VC VC && Một số lưu ý BB BB Một số lưu ý  Con trỏ khái niệm quan trọng khó C Mức độ thành thạo C đánh giá qua mức độ sử dụng trỏ  Nắm rõ quy tắc sau, ví dụ int a, *pa = &a; • *pa a nội dung biến a • pa &a địa biến a  Không nên sử dụng trỏ chưa khởi tạo Kết không lường trước NMLT - Con trỏ VC VC && 11 Con trỏ mảng chiều BB BB Mảng chiều int array[3];  Tên mảng array trỏ  thay đổi giá trị  array địa mảng array == &array[0] 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … array NMLT - Con trỏ 12 VC VC && Con trỏ mảng chiều BB BB Con trỏ đến mảng chiều int array[3], *parray; parray = array; // Cách parray = &array[0]; // Cách 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 VC VC && NMLT - Con trỏ 13 Phép toán số học trỏ BB BB Phép cộng (tăng)  + n  + n * sizeof()  Có thể sử dụng toán tử gộp += ++ p = array +2 +1 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … int array[3]; … NMLT - Con trỏ 14 VC VC && Phép toán số học trỏ BB BB Phép trừ (giảm)  – n  – n * sizeof()  Có thể sử dụng tốn tử gộp –= – – p = &array[2] –2 –1 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … int array[3]; VC VC && BB BB NMLT - Con trỏ 15 Phép toán số học trỏ Các phép toán khác  Phép so sánh: So sánh địa hai trỏ (thứ tự nhớ) • == •> •< != >=

Ngày đăng: 03/12/2015, 20:50

Tài liệu cùng người dùng

Tài liệu liên quan