
Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer)
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) Chương 8 Con trỏ (Pointer) Presenter:Nhập môn về lập trình (C8) Slide 1 Learning outcomes L.O.6.1 – Khai báo được con trỏ. L.O.6.2 – Truy xuất được dữ liệu qua con trỏ. L.O.6.3 – Giải thích được cách cấp phát bộ nhớ động. L.O.6.4 – Sử dụng được các phép toán trên con trỏ. L.O.6.5 – Sử dụng được con trỏ của con trỏ khác. L.O.6.6 – Dùng được con trỏ với kiểu cấu trúc. L.O.6.7 – Hiểu được sự liên quan giữa con trỏ và mảng.Nhập môn về lập trình (C8) Slide 2 Kiểu con trỏ (pointer) Định nghĩa Kiểu con trỏ là kiểu biến đặc biệt chỉ dùng để giữ địa chỉ (tham khảo). Dùng dấu * để định nghĩa. Ví dụ: Toán tử Toán tử & cho phép gán địa chỉ của một biến vào con trỏ như sau : = & Ví dụ : Con trỏ biến được dùng lưu giữ địa chỉ các biến và cho phép truy xuất biến một cách gián tiếp. Ứng dụng thường dùng là tham số hàm.Nhập môn về lập trình (C8) Slide 3 Kiểu con trỏ (pointer) Ví dụ 1Nhập môn về lập trình (C8) Slide 4 Con trỏ biến cấu trúc Tham số hàm kiểu con trỏ cấu trúcNhập môn về lập trình (C8) Slide 5 Pointer và cấp phát động Ý tưởng Kiểu pointer rất thích hợp để quản lý dữ liệu có độ lớn chưa biết trước tại thời điểm lập trình. Ví dụ : double param[100][100]; // cấp phát 10.000 phần tử kiểu double hay double** param; // chỉ cấp phát 1 pointer (double**) (double) (double*)Nhập môn về lập trình (C8) Slide 6 Pointer và cấp phát động hiện thực Sau khi có con trỏ đến ma trận, để có ma trận thực sự, ta dùng hàm malloc (memory allocation) trong thư viện malloc.lib (#include malloc.h) để sinh ra các vector và phần tử. Ví dụ : • Sinh ra m vector (m chưa biết trước) printf (Nhap M: ); scanf_s(%d, &m); param = (double**) malloc(m * sizeof(double*)); • Sinh ra n phần tử trong mỗi vector (n chưa biết trước) printf (Nhap N: ); scanf_s(%d, &n); for (i = 0; i < m; i++) param[i] = (double*) malloc(n * sizeof(double)); Chú ý toán tử sizeof(kiểu) trả về kích thước kiểu cần cấp phát trong bộ nhớ.Nhập môn về lập trình (C8) Slide 7 Pointer và cấp phát động Ví dụNhập môn về lập trình (C8) Slide 8 Ví dụ thêm về con trỏ int* pi; // pointer to int char** ppc ; // pointer to pointer to char int* ap[15]; // array of 15 pointers to ints int (*fp)(char*); // pointer to function taking a char* // argument; returns an int int* f(char*); // function taking a char* argument; // returns a pointer to intNhập môn về lập trình (C8) Slide 9 Pointers to strings Đúng hay sai ? char *psz; psz = “File not ready”; char *psz = “File not ready”; char pszarray[ ] = “Drive not ready”; char pszarray[16]; pszarray = “Drive not ready”; char *psz; scanf_s(“%s”,psz);Nhập môn về lập trình (C8) Slide 10 Pointer arithmetic and arrays Ví dụ 1Nhập môn về lập trình (C8) Slide 11 Pointer arithmetic and arrays Ví dụ 2Nhập môn về lập trình (C8) Slide 12 Con trỏ và hằng void f1 (char *p) { char s[] = Gorm; const char* pc=s ; // con trỏ đến một hằng pc[3]=´g´; // sai: không thể thay đổi nội dung pc=p; // ok: có thể thay đổi địa chỉ char *const cp=s; // hằng con trỏ cp[3]=´a´; // ok: có thể thay đổi nội dung cp=p; // sai: không thể thay đổi địa chỉ const char *const cpc=s; // hằng con trỏ đến một hằng cpc[3]=´a´; // sai: không thể thay đổi nội dung cpc=p ; ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Nhập môn về lập trình Nhập môn lập trình Kiểu con trỏ Con trỏ biến Khai báo con trỏ Truy xuất dữ liệu Con trỏ biến cấu trúcTài liệu có liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 357 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 188 0 0 -
Giáo trình Lập trình C căn bản: Phần 2
71 trang 179 0 0 -
Giáo trình nhập môn lập trình - Phần 22
48 trang 143 0 0 -
Khóa luận tốt nghiệp: Xây dựng Firewall & IPS trên checkpoint
94 trang 141 0 0 -
Bài giảng Nhập môn lập trình - Chương 12: Quản lý bộ nhớ
23 trang 69 0 0 -
Bài giảng Tin học cơ sở 4 - Bài 8: Con trỏ
34 trang 43 0 0 -
Bài giảng Nhập môn lập trình: Bài 2 - Thuật toán
32 trang 42 0 0 -
Nhập môn lập trình (Đặng Bình Phương) - Các khái niệm cơ bản về hệ điều hành
17 trang 39 0 0 -
Bài giảng Lập trình cơ bản: Bài 6 - Chu Thị Hường
38 trang 39 0 0 -
Câu hỏi bài tập nhập môn lập trình
11 trang 37 0 0 -
CÁC KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH
21 trang 36 0 0 -
Bài giảng Nhập môn lập trình - Bài 3: Hệ điều hành
17 trang 35 0 0 -
Bài giảng Nhập môn lập trình - Bài 7: Câu lệnh điều kiện và rẽ nhánh
32 trang 33 0 0 -
Bài giảng Nhập môn lập trình: Chương 0 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM
10 trang 32 0 0 -
Bài giảng Nhập môn lập trình - Bài 8: Mảng hai chiều
33 trang 32 0 0 -
Giáo trình Visual Basic 6.0 - Trường ĐH Sư phạm Kỹ thuật
172 trang 31 0 0 -
Giáo trình đào tạo Visual Basic 6.0 - FPT Software Solution
261 trang 31 0 0 -
Bài giảng Nhập môn lập trình - Bài 5: Câu lệnh lặp
49 trang 31 0 0 -
Bài giảng Nhập môn lập trình: Chương 5 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM
61 trang 31 0 0