
Bài giảng Kỹ thuật lập trình: Chương 3 (phần 3) - Võ Quang Hoàng Khang
lượt xem 3
download

Bài giảng Kỹ thuật lập trình - Chương 3 (phần 3): Kiểu con trỏ. Chương này gồm có những nội dung chính sau: Con trỏ và mảng nhiều chiều, mảng con trỏ, con trỏ hàm, một số bài tập liên quan Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Kỹ thuật lập trình: Chương 3 (phần 3) - Võ Quang Hoàng Khang
- Trường Đại Học Công Nghiệp TP. HCM Khoa Công Nghệ Thông Tin CHƯƠNG 3: KIỂU CON TRỎ(p3) Võ Quang Hoàng Khang Email: vqhkhang@gmail.com 1
- & VC BB Nội dung 1 Con trỏ và mảng nhiều chiều 2 Mảng con trỏ 3 Con trỏ hàm 4 Bài tập 2
- & VC BB Con trỏ và mảng 1 chiều (nhắc lại) Tên mảng là con trỏ, trỏ đến phần tử đầu tiên của mảng Ví dụ: a[3] a 3
- & VC BB Con trỏ và mảng 1 chiều (nhắc lại) Ví dụ: int a[10]; int *pa; pa = &a[0];//pa chứa địa chỉ của a[0] … int x = *pa;//copy content of a[0] to x int y = *(pa+1);//copy content of a[1] to y 4
- & VC BB Con trỏ và mảng 1 chiều (nhắc lại) Truy cập các phần tử mảng theo dạng con trỏ: &[0] tương đương với & [] tương đương với + [] tương đương v ới *( + ) //Nhập mảng theo dạng con trỏ void NhapContro(int a[], int N) { int i; for(i=0;i
- & VC BB Con trỏ và mảng 2 chiều int a[3][4]; 0 1 2 3 4 5 6 7 8 9 10 11 a 0 1 2 int 6
- & VC BB Con trỏ và mảng 2 chiều Hướng tiếp cận Các phần tử tạo thành mảng 1 chiều Sử dụng con trỏ int *p để duyệt mảng 1 chiều int *p =(int *) a; +1 0 1 2 3 4 5 6 7 8 9 10 11 int a[3][4] 7
- & VC BB Hướng tiếp cận Tổng quát: int a[n][m]; int *p; Thực hiện phép gán: p=(int *) a; Khi đó: a[0][0] được quản lý bởi p; a[0][1] được quản lý bởi p+1; a[0][2] được quản lý bởi p+2; … 8
- & VC BB Hướng tiếp cận a[1][0] được quản lý bởi p+m; a[1][1] được quản lý bởi p+m+1; … a[n-1][m-1] được quản lý bởi p+(n -1)*m + (m- 1); 9
- & VC BB Ví dụ Nhập / Xuất theo chỉ số mảng 1 chiều #define n 3 #define m 4 void main() { int a[n][m], i; int *p = (int *)a; for (i = 0; i < n*m; i++) { printf(“Nhap phan tu thu %d: ”, i); scanf(“%d”, p + i); } for (i = 0; i < n*m; i++) printf(“%d ”, *(p + i)); } 10
- & VC BB Hướng tiếp cận Liên hệ giữa chỉ số mảng 1 chiều và chỉ số mảng 2 chiều (i, j) k ? k = i*m + j 0 1 2 3 4 5 6 7 8 9 10 11 an x m 0 1 k (i, j) ? 2 i=k/m j=k%m 11
- & VC BB Ví dụ Nhập / Xuất theo chỉ số mảng 2 chiều int a[n][m],k,i,j; int *p = (int *)a; for (k = 0;k < n*m; k++) { printf("Nhap a[%d][%d]:", k/m, k%m); scanf("%d",p+k); } for (i = 0; i < n; i++) { for (j = 0; j < m; j++) printf("%d", *(p + i * m + j));// *p++ printf("\n"); } 12
- & VC BB Mảng con trỏ Đặt vấn đề Sử dụng cấu trúc dữ liệu nào để lưu trữ thông tin sau? 0 1 2 3 4 5 6 7 0 1 5 6 1 2 9 1 2 1 7 0 6 2 0 2 Giải pháp? Cách 1: Mảng 2 chiều 3x8 (tốn bộ nhớ) 13
- & VC BB Mảng con trỏ Kiểu phần tử của mảng có thể là kiểu con trỏ. Các biến có địa chỉ chứa trong các phần tử mảng con trỏ là một mảng, nhưng có vùng nhớ không liên tục. Thường dùng để lưu mảng của chuỗi Ví dụ: char *s[5] = {“Orange”, “Mango”, “Coconut”, “Longan”, “Banana”}; Mỗi phần tử của s trỏ đến char * (1 chuỗi) Mảng không chứa chuỗi, chỉ trỏ đến chuỗi 14
- & VC BB Mảng con trỏ Cách 2: Mảng 1 chiều các con trỏ 18 19 1A 1B 1C 1D 1E 1F … 1 5 6 … 28 29 2A 2B 2C 2D 2E 2F … 2 9 1 2 1 7 0 6 … 3A 3B 3C 0 2 … 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … 19 00 00 00 28 00 00 00 3A 00 00 00 … array 15
- & VC BB Mảng con trỏ Ví dụ void print_strings(char *p[], int n) { for (int i = 0; i
- & VC BB Con trỏ hàm Khái niệm Hàm cũng đuợc lưu trữ trong bộ nhớ, tức là cũng có địa chỉ. Con trỏ hàm là con trỏ trỏ đến vùng nhớ chứa hàm và có thể gọi hàm thông qua con trỏ đó. 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … 11 00 00 00 … p int Cong(int, int) 17
- & VC BB Con trỏ hàm Khai báo tường minh (* )(ds tham số); Ví dụ // Con trỏ đến hàm nhận đối số int, trả về int int (*ptof1)(int x); // Con trỏ đến hàm nhận 2 đối số double, không trả về void (*ptof2)(double x, double y); // Con trỏ đến hàm nhận đối số mảng, trả về char char (*ptof3)(char *p[]); // Con trỏ đến không nhận đối số và không trả về void (*ptof4)(); 18
- & VC BB Con trỏ hàm Khai báo không tường minh (thông qua kiểu) typedef (* )(ds tham số); ; Ví dụ int (*pt1)(int, int); // Tường minh typedef int (*PhepToan)(int, int); PhepToan pt2, pt3; // Không tường minh 19
- & VC BB Con trỏ hàm Gán giá trị cho con trỏ hàm = ; = &; Hàm được gán phải cùng dạng (vào, ra) Ví dụ int Cong(int x, int y); // Hàm int Tru(int x, int y); // Hàm int (*tinhtoan)(int x, int y); // Con trỏ hàm tinhtoan = Cong; // Dạng ngắn gọn tinhtoan = &Tru; // Dạng sử dụng địa chỉ tinhtoan = NULL; // Không trỏ đến đâu cả 20

CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Quang
39 p |
23 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 9 - Trần Quang
33 p |
13 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
34 p |
22 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p |
27 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p |
26 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p |
21 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p |
24 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p |
27 |
2
-
Bài giảng Kỹ thuật lập trình: Hàm nâng cao (Phần 1) - ThS. Đặng Bình Phương
26 p |
13 |
0
-
Bài giảng Kỹ thuật lập trình: Các kỹ thuật thao tác trên bit - ThS. Đặng Bình Phương
29 p |
18 |
0
-
Bài giảng Kỹ thuật lập trình: Kỹ thuật lập trình đệ quy - ThS. Đặng Bình Phương
44 p |
15 |
0
-
Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu cấu trúc - ThS. Đặng Bình Phương
33 p |
15 |
0
-
Bài giảng Kỹ thuật lập trình: Chuỗi ký tự - ThS. Đặng Bình Phương
20 p |
16 |
0
-
Bài giảng Kỹ thuật lập trình: Chuyển đổi kiểu dữ liệu và cấp phát bộ nhớ động - ThS. Đặng Bình Phương
28 p |
18 |
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
48 p |
16 |
0
-
Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu con trỏ (Cơ bản) - ThS. Đặng Bình Phương
40 p |
6 |
0
-
Bài giảng Kỹ thuật lập trình: Giới thiệu môn học - ThS. Đặng Bình Phương
7 p |
14 |
0
-
Bài giảng Kỹ thuật lập trình: Hàm nâng cao (Phần 2) - ThS. Đặng Bình Phương
30 p |
10 |
0


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
