NHẬP MÔN LẬP TRÌNH- DỮ LIỆU KIỂU CON TRỎ (NÂNG CAO)
Số trang: 44
Loại file: pdf
Dung lượng: 1.13 MB
Lượt xem: 14
Lượt tải: 0
Xem trước 5 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Đặt vấn đềvoid CapPhat(int *p, int n) { p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(a, 2); // a vẫn = NULL }Làm sao thay đổi giá trị của con trỏ (không phải giá trị mà nó trỏ đến) sau khi gọi hàm?Dữ liệu kiểu con trỏ (nâng cao)
Nội dung trích xuất từ tài liệu:
NHẬP MÔN LẬP TRÌNH- DỮ LIỆU KIỂU CON TRỎ (NÂNG CAO)Trường Đại học Khoa học Tự nhiênKhoa Công nghệ thông tinBộ môn Tin học cơ sở NHẬP MÔN LẬP TRÌNH Đặng Bình Phương dbphuong@fit.hcmus.edu.vn DỮ LIỆU KIỂU CON TRỎ (NÂNG CAO) 1 & Nội dungVC BB 1 Con trỏ cấp 2 2 Con trỏ và mảng nhiều chiều 3 Mảng con trỏ 4 Con trỏ hàm 2 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2 (con trỏ đến con trỏ)VC BB Đặt vấn đề void CapPhat(int *p, int n) { p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(a, 2); // a vẫn = NULL } Làm sao thay đổi giá trị của con trỏ (không phải giá trị mà nó trỏ đến) sau khi gọi hàm? 3 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB int *p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 22 00 00 00 02 00 00 00 NULL … CapPhat int *p int n NULL 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … NULL … int *a = NULL 4 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB 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ả về int* CapPhat(int n) { int *p = (int *)malloc(n * sizeof(int)); return p; } 5 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB Giải pháp Sử dụng con trỏ p trỏ đến con trỏ a này. Hàm sẽ thay đổi giá trị của con trỏ â gián tiếp thông qua con trỏ p. void CapPhat(int **p, int n) { *p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(&a, 4); } 6 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB int **p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 0B 00 00 00 02 00 00 00 … CapPhat int **p int n 0B 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … 22 00 00 00 NULL … int *a = NULL 7 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB Lưu ý int x = 12; int *ptr = &x; // OK int k = &x; ptr = k; // Lỗi int **ptr_to_ptr = &ptr; // OK int **ptr_to_ptr = &x; // Lỗi **ptr_to_ptr = 12; // OK *ptr_to_ptr = 12; // Lỗi printf(“%d”, ptr_to_ptr); // Địa chỉ ptr printf(“%d”, *ptr_to_ptr); // Giá trị ptr printf(“%d”, **ptr_to_ptr); // Giá trị x 8 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ và mảng 2 chiềuVC BB int a[3][4]; 0 1 2 3 4 5 6 7 8 9 10 11 0 a 1 int 2 0 1 2 3 1 2 0 a 1 2 int[4] ...
Nội dung trích xuất từ tài liệu:
NHẬP MÔN LẬP TRÌNH- DỮ LIỆU KIỂU CON TRỎ (NÂNG CAO)Trường Đại học Khoa học Tự nhiênKhoa Công nghệ thông tinBộ môn Tin học cơ sở NHẬP MÔN LẬP TRÌNH Đặng Bình Phương dbphuong@fit.hcmus.edu.vn DỮ LIỆU KIỂU CON TRỎ (NÂNG CAO) 1 & Nội dungVC BB 1 Con trỏ cấp 2 2 Con trỏ và mảng nhiều chiều 3 Mảng con trỏ 4 Con trỏ hàm 2 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2 (con trỏ đến con trỏ)VC BB Đặt vấn đề void CapPhat(int *p, int n) { p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(a, 2); // a vẫn = NULL } Làm sao thay đổi giá trị của con trỏ (không phải giá trị mà nó trỏ đến) sau khi gọi hàm? 3 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB int *p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 22 00 00 00 02 00 00 00 NULL … CapPhat int *p int n NULL 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … NULL … int *a = NULL 4 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB 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ả về int* CapPhat(int n) { int *p = (int *)malloc(n * sizeof(int)); return p; } 5 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB Giải pháp Sử dụng con trỏ p trỏ đến con trỏ a này. Hàm sẽ thay đổi giá trị của con trỏ â gián tiếp thông qua con trỏ p. void CapPhat(int **p, int n) { *p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(&a, 4); } 6 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB int **p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 0B 00 00 00 02 00 00 00 … CapPhat int **p int n 0B 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … 22 00 00 00 NULL … int *a = NULL 7 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ cấp 2VC BB Lưu ý int x = 12; int *ptr = &x; // OK int k = &x; ptr = k; // Lỗi int **ptr_to_ptr = &ptr; // OK int **ptr_to_ptr = &x; // Lỗi **ptr_to_ptr = 12; // OK *ptr_to_ptr = 12; // Lỗi printf(“%d”, ptr_to_ptr); // Địa chỉ ptr printf(“%d”, *ptr_to_ptr); // Giá trị ptr printf(“%d”, **ptr_to_ptr); // Giá trị x 8 Dữ liệu kiểu con trỏ (nâng cao) & Con trỏ và mảng 2 chiềuVC BB int a[3][4]; 0 1 2 3 4 5 6 7 8 9 10 11 0 a 1 int 2 0 1 2 3 1 2 0 a 1 2 int[4] ...
Tìm kiếm theo từ khóa liên quan:
lập trình hướng đối tượng nhập môn lập trình tin học cơ sở lập trình cơ bản ngôn ngữ lập trình C lập trình C căn bảnGợi ý tài liệu 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 311 0 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 269 0 0 -
101 trang 199 1 0
-
Giáo trình Lập trình C căn bản: Phần 2
71 trang 171 0 0 -
Giáo trình Lập trình C căn bản: Phần 1
64 trang 169 0 0 -
Giáo trình Lập trình C căn bản
135 trang 161 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 159 0 0 -
Giới thiệu : Lập trình mã nguồn mở
14 trang 156 0 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 149 0 0 -
Bài giảng Lập trình C căn bản: Chương 4 - Phạm Thế Bảo
34 trang 146 0 0