Bài giảng kỹ thuật lập trình dữ liệu kiểu con trỏ (nâng cao) ths đặng bình phương

48 371 0
Bài giảng kỹ thuật lập trình  dữ liệu kiểu con trỏ (nâng cao)   ths  đặng bình phương

Đ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

Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Trường Đại học Khoa học Tự nhiên KỸ THUẬT LẬP TRÌNH ThS Đặng Bình Phương dbphuong@fit.hcmus.edu.vn DỮ LIỆU KIỂU CON TRỎ (NÂNG CAO) VC VC && BB BB Nội dung Con trỏ cấp 2 Con trỏ mảng nhiều chiều Mảng trỏ Con trỏ hàm Dữ liệu kiểu trỏ (nâng cao) VC VC && BB BB Con trỏ cấp (con trỏ đến trỏ)  Đặt vấn đề void CapPhat(int *p, int n) { p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(a, 2); // a = NULL } Làm thay đổi giá trị trỏ (không phải giá trị mà trỏ đến) sau gọi hàm? Dữ liệu kiểu trỏ (nâng cao) VC VC && BB BB Con trỏ cấp int *p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 22 N UU 00 LL 00 LL 02 22 N 00 00 00 00 0200 0000 0000 00 CapPhat int int *p *p NULL … int int nn 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … N N UU LL LL int *a = NULL … Dữ liệu kiểu trỏ (nâng cao) VC VC && BB BB Con trỏ cấp  Giải pháp  Sử dụng tham chiếu int *&p (trong C++) void CapPhat(int *&p, int n) { p = (int *)malloc(n * sizeof(int)); }  Không thay đổi trực tiếp tham số mà trả int* CapPhat(int n) { int *p = (int *)malloc(n * sizeof(int)); return p; } Dữ liệu kiểu trỏ (nâng cao) VC VC && BB BB Con trỏ cấp  Giải pháp  Sử dụng trỏ p trỏ đến trỏ a Hàm thay đổi giá trị trỏ â gián tiếp thông qua trỏ p void CapPhat(int **p, int n) { *p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(&a, 4); } Dữ liệu kiểu trỏ (nâng cao) VC VC && BB BB Con trỏ cấp int **p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 0B 0B00 0000 0000 0002 0200 0000 0000 00 CapPhat int int **p **p 0B … int int nn 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … 22 N UU 00 LL 00 LL 22 N 00 00 00 00 int *a = NULL … Dữ liệu kiểu trỏ (nâng cao) VC VC && BB BB Con trỏ cấp  Lưu ý int x = 12; int *ptr = &x; int k = &x; ptr = k; // OK // Lỗi int **ptr_to_ptr = &ptr; int **ptr_to_ptr = &x; // OK // Lỗi **ptr_to_ptr = 12; *ptr_to_ptr = 12; // OK // Lỗi printf(“%d”, ptr_to_ptr); printf(“%d”, *ptr_to_ptr); printf(“%d”, **ptr_to_ptr); // Địa ptr // Giá trị ptr // Giá trị x Dữ liệu kiểu trỏ (nâng cao) VC VC && BB BB Con trỏ mảng chiều int a[3][4]; a 10 11 int a 2 int[4] Dữ liệu kiểu trỏ (nâng cao) VC VC && BB BB Con trỏ mảng chiều  Hướng tiếp cận  Các phần tử tạo thành mảng chiều  Sử dụng trỏ int * để duyệt mảng chiều int *p = (int *)a +1 10 11 int a[3][4] Dữ liệu kiểu trỏ (nâng cao) 10 VC VC && BB BB Con trỏ hàm  Mảng trỏ hàm typedef (*PhepToan)(int, int); void main() { int (*array1[2])(int, int); PhepToan array2[2]; // tường minh // kô tường minh array1[0] = array2[1] = &Cong; array1[1] = array2[0] = &Tru; printf(“%d\n”, printf(“%d\n”, printf(“%d\n”, printf(“%d\n”, (*array1[0])(1, 2)); array1[1](1, 2)); array2[0](1, 2)); array2[1](1, 2)); } Dữ liệu kiểu trỏ (nâng cao) 34 VC VC && BB BB Con trỏ hàm  Lưu ý  Không quên dấu () khai báo trỏ hàm • int (*PhepToan)(int x, int y); • int *PhepToan(int x, int y);  Có thể bỏ tên biến tham số khai báo trỏ hàm • int (*PhepToan)(int x, int y); • int (*PhepToan)(int, int); Dữ liệu kiểu trỏ (nâng cao) 35 VC VC && BB BB Bài tập  Câu 1: Ta khai báo sử dụng biến trỏ đến cấp thứ mấy?   Câu 2: Có khác trỏ đến chuỗi trỏ đến mảng ký tự không?  Dữ liệu kiểu trỏ (nâng cao) 36 VC VC && BB BB Bài tập  Câu 3: Nếu không sử dụng kiến thức nâng cao trỏ, ta giải số tốn khơng?   Câu 4: Hãy nêu vài ứng dụng trỏ hàm  Dữ liệu kiểu trỏ (nâng cao) 37 VC VC && BB BB Bài tập  Câu 5: Viết đoạn lệnh khai báo biến x kiểu float, khai báo khởi tạo trỏ px đến biến x khai báo khởi tạo trỏ ppx đến trỏ px   Câu 6: Ta muốn gán 100 cho x thông qua trỏ ppx biểu thức gán “ppx = 100;” có khơng?  Dữ liệu kiểu trỏ (nâng cao) 38 VC VC && BB BB Bài tập  Câu 7: Giả sử ta khai báo mảng array chiều: int array[2][3][4] Cho biết cấu trúc mảng trình biên dịch C  Câu 8: Cho biết array[0][0] có nghĩa gì?  Dữ liệu kiểu trỏ (nâng cao) 39 VC VC && BB BB Bài tập  Câu 9: Xét xem biểu thức so sánh sau a array[0][0] == &array[0][0][0]; b array[0][1] == array[0][0][1]; c array[0][1] == &array[0][1][0];   Câu 10: Viết nguyên mẫu hàm nhận mảng trỏ đến kiểu char làm đối số, giá trị trả có kiểu void  Dữ liệu kiểu trỏ (nâng cao) 40 VC VC && BB BB Bài tập  Câu 11: Theo cách viết câu 10, ta biết số phần tử mảng truyền kô?   Câu 12: Con trỏ đến hàm gì?   Câu 13: Viết khai báo trỏ đến hàm mà hàm có giá trị trả kiểu char, nhận đối số mảng trỏ đến kiểu char  Dữ liệu kiểu trỏ (nâng cao) 41 VC VC && BB BB Bài tập  Câu 13: Ta viết khai báo trỏ câu 12 có khơng? char *ptr(char *x[]);   Câu 14: Cho biết ý nghĩa khai báo sau: a int *var1; b int var2; c int **var3; Dữ liệu kiểu trỏ (nâng cao) 42 VC VC && BB BB Bài tập  Câu 15: Cho biết ý nghĩa khai báo sau: a int a[3][12];  b int (*b)[12];  c int *c[12];  Dữ liệu kiểu trỏ (nâng cao) 43 VC VC && BB BB Bài tập  Câu 16: Cho biết ý nghĩa khai báo sau: a char *z[10];  b char *y(int field);  c char (*x)(int field);  Dữ liệu kiểu trỏ (nâng cao) 44 VC VC && BB BB Bài tập  Câu 17: Viết khai báo trỏ func đến hàm nhận đối số số nguyên trả giá trị kiểu float   Câu 18: Viết khai báo mảng trỏ đến hàm Các hàm nhận chuỗi ký tự làm tham số trả giá trị kiểu nguyên Ta sử dụng mảng để làm gì?  Dữ liệu kiểu trỏ (nâng cao) 45 VC VC && BB BB Bài tập  Câu 19: Viết câu lệnh khai báo mảng 10 trỏ đến kiểu char   Câu 20: Tìm lỗi sai đoạn lệnh sau  int x[3][12];  int *ptr[12];  ptr = x;  Dữ liệu kiểu trỏ (nâng cao) 46 VC VC && BB BB Bài tập  Câu 21: Viết chương trình khai báo mảng hai chiều có 12x12 phần tử kiểu char Gán ký tự ‘X’ cho phần tử mảng Sử dụng trỏ đến mảng để in giá trị phần tử mảng lên hình dạng lưới  Câu 22: Viết chương trình khai báo mảng 10 trỏ đến kiểu float, nhận 10 số thực từ bàn phím, xếp lại in hình dãy số xếp  Câu 23: Sửa lại tập 22 để người sử dụng lựa chọn cách xếp theo thứ tự tăng hay giảm dần Dữ liệu kiểu trỏ (nâng cao) 47 VC VC && BB BB Bài tập  Câu 24: Chương trình cho phép người dùng nhập dịng văn từ bàn phím đến nhập dịng trống Chương trình xếp dòng theo thứ tự alphabet hiển thị chúng hình  Câu 25: Sử dụng trỏ hàm để viết hàm xếp sau  Tăng dần  Giảm dần  Dương giảm âm tăng, cuối số 48 … Dữ liệu kiểu trỏ (nâng cao)

Ngày đăng: 28/05/2016, 10:02

Từ khóa liên quan

Mục lục

  • KỸ THUẬT LẬP TRÌNH

  • Nội dung

  • Con trỏ cấp 2 (con trỏ đến con trỏ)

  • Con trỏ cấp 2

  • Slide 5

  • Slide 6

  • Slide 7

  • Slide 8

  • Con trỏ và mảng 2 chiều

  • Slide 10

  • Hướng tiếp cận 1

  • Slide 12

  • Slide 13

  • Slide 14

  • Hướng tiếp cận 2

  • Slide 16

  • Slide 17

  • Slide 18

  • Slide 19

  • Slide 20

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

  • Đang cập nhật ...

Tài liệu liên quan