Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer)
lượt xem 3
download
Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) với mục tiêu giúp sinh viên khai báo được con trỏ, truy xuất được dữ liệu qua con trỏ, giải thích được cách cấp phát bộ nhớ động, sử dụng được các phép toán trên con trỏ, dùng được con trỏ với kiểu cấu trúc,... Mời các bạn cùng tham khảo nội dung chi tiết bài giảng.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: 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ụ 1 Nhậ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úc Nhậ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 int Nhậ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ụ 1 Nhập môn về lập trình (C8) Slide 11
- Pointer arithmetic and arrays Ví dụ 2 Nhậ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 ; // sai: lẫn địa chỉ } *const là toán tử khai báo hằng con trỏ (không có toán tử const*). Nhập môn về lập trình (C8) Slide 13
- Phép toán trên pointer Kết quả nhận được là gì ? Thường dùng (pointer + integer) Có thể trừ số nguyên vào con trỏ (pointer - integer) Có thể trừ hai con trỏ (pointer - pointer) Có thể so sánh hai con trỏ với nhau (=) Nhập môn về lập trình (C8) Slide 14
- Con trỏ đến hàm Nhập môn về lập trình (C8) Slide 15
- Dãy con trỏ hàm Khái niệm Dãy con trỏ hàm thích hợp với các bài toán xử lý theo sơ đồ chuyển trạng thái. Gọi hàm xuly[0] () 00 Nhập số N In kết quả Tính toán 01 02 Gọi hàm xuly[2] () Gọi hàm xuly[1] () Nhập môn về lập trình (C8) Slide 16
- Dãy con trỏ hàm Ví dụ Sửa lại hàm tinhdiem_tk() để dùng dãy con trỏ hàm. Chương trình dùng dãy con trỏ hàm Nhập môn về lập trình (C8) Slide 17
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Nhập môn Công nghệ thông tin: Lab 1 - Th.S Dương Thành Phết
13 p | 225 | 44
-
Bài giảng Nhập môn lập trình - Chương 9: Chuỗi ký tự
19 p | 88 | 11
-
Bài giảng Nhập môn lập trình - Chương 1: Các khái niệm cơ bản về lập trình
20 p | 113 | 8
-
Bài giảng Nhập môn lập trình: Bài 2 - Trần Duy Thanh
18 p | 105 | 7
-
Bài giảng Nhập môn lập trình - Bài 2: Giới thiệu ngôn ngữ lập trình C
18 p | 110 | 5
-
Bài giảng Nhập môn lập trình: Chương 1 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM
20 p | 17 | 5
-
Bài giảng Nhập môn lập trình: Chương 7 - Trần Minh Thái
8 p | 61 | 5
-
Bài giảng Nhập môn lập trình: Giới thiệu học phần - Nguyễn Đình Hưng
7 p | 63 | 4
-
Bài giảng Nhập môn lập trình: Giới thiệu học phần - Trần Minh Thái
17 p | 79 | 4
-
Bài giảng Nhập môn về lập trình - Chương 9: Sử dụng tập tin (file)
12 p | 40 | 3
-
Bài giảng Nhập môn về lập trình - Chương 7: Mảng (Array)
8 p | 44 | 3
-
Bài giảng Nhập môn về lập trình - Chương 6: Hàm (Function)
19 p | 35 | 3
-
Bài giảng Nhập môn về lập trình - Chương 5: Vòng lặp while, do-while, for
20 p | 42 | 3
-
Bài giảng Nhập môn về lập trình - Chương 4: Lệnh if-else, lệnh switch
14 p | 43 | 3
-
Bài giảng Nhập môn công nghệ phần mềm: Chương 3 - TS. Nguyễn Văn Hiệp
13 p | 53 | 3
-
Bài giảng Nhập môn lập trình: Bài 3 - Trần Duy Thanh
16 p | 94 | 3
-
Bài giảng Nhập môn lập trình: Tổng quan về ngôn ngữ lập trình C - Nguyễn Đình Hưng
14 p | 101 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn