1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Slide nmvlt c8

17 2 0

Đ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

Chương Con trỏ (Pointer) Presenter: Nhập môn lập trình (C8) Slide Learning outcomes L.O.6.1 – Khai báo trỏ L.O.6.2 – Truy xuất liệu qua trỏ L.O.6.3 – Giải thích cách cấp phát nhớ động L.O.6.4 – Sử dụng phép toán trỏ L.O.6.5 – Sử dụng trỏ trỏ khác L.O.6.6 – Dùng trỏ với kiểu cấu trúc L.O.6.7 – Hiểu liên quan trỏ mảng Nhập môn lập trình (C8) Slide Kiểu trỏ (pointer) Định nghĩa  Kiểu 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 Toán tử tử '&' cho phép gán địa chỉ biến vào trỏ 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 cách gián tiếp  Ứng dụng thường dùng là tham số hàm Nhập môn lập trình (C8) Slide Kiểu trỏ (pointer) Ví dụ Nhập mơn lập trình (C8) Slide Con trỏ biến cấu trúc Tham số hàm kiểu trỏ cấu trúc Nhập mơn lập trình (C8) Slide 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 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 pointer (double) (double**) (double*) Nhập mơn lập trình (C8) Slide Pointer và cấp phát động Hiện thực  Sau có trỏ đến ma trận, để có ma trận thực sự, ta dùng hàm malloc (memory allocation) thư viện malloc.lib (#include malloc.h) để sinh các vector và phần tử  Ví dụ : • Sinh m vector (m chưa biết trước) printf ("Nhap M: "); scanf_s("%d", &m); param = (double**) malloc(m * sizeof(double*)); • Sinh n phần tử 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 nhớ Nhập mơn lập trình (C8) Slide Pointer và cấp phát động Ví dụ Nhập mơn lập trình (C8) Slide Ví dụ thêm về 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 lập trình (C8) Slide 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 lập trình (C8) Slide 10 Pointer arithmetic and arrays Ví dụ Nhập mơn lập trình (C8) Slide 11 Pointer arithmetic and arrays Ví dụ Nhập mơn lập trình (C8) Slide 12 Con trỏ và hằng void f1 (char *p) { char s[] = "Gorm"; const char* pc=s ; pc[3]=´g´; pc=p; // trỏ đến một hằng // sai: không thể thay đổi nội dung // ok: có thể thay đổi địa chỉ char *const cp=s; cp[3]=´a´; cp=p; // hằng trỏ // ok: có thể thay đổi nội dung // sai: không thể thay đổi địa chỉ const char *const cpc=s; cpc[3]=´a´; cpc=p ; // hằng trỏ đến hằng // sai: không thể thay đổi nội dung // sai: lẫn địa chỉ } *const toán tử khai báo hằng trỏ (khơng có tốn tử const*) Nhập mơn lập trình (C8) Slide 13 Phép toán pointer Kết quả nhận được là gì ?  Thường dùng (pointer + integer)  Có thể trừ sớ ngun vào trỏ (pointer - integer)  Có thể trừ hai trỏ (pointer - pointer)  Có thể so sánh hai trỏ với Nhập môn lập trình (C8) (=) Slide 14 Con trỏ đến hàm Nhập mơn lập trình (C8) Slide 15 Dãy trỏ hàm Khái niệm  Dãy 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 Nhập số N Tính toán 00 Gọi hàm xuly[0] () In kết 01 Gọi hàm xuly[1] () Nhập mơn lập trình (C8) 02 Gọi hàm xuly[2] () Slide 16 Dãy trỏ hàm Ví dụ  Sửa lại hàm tinhdiem_tk() để dùng dãy trỏ hàm  Chương trình dùng dãy trỏ hàm Nhập mơn lập trình (C8) Slide 17

Ngày đăng: 11/04/2023, 18:54

Xem thêm: