Bài giảng Kỹ thuật lập trình: Chương 3 (phần 3) - Võ Quang Hoàng Khang
Số trang: 31
Loại file: pdf
Dung lượng: 1.42 MB
Lượt xem: 13
Lượt tải: 0
Xem trước 4 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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.
Nội dung trích xuất từ tài liệu:
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ỏ t ...
Nội dung trích xuất từ tài liệu:
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ỏ t ...
Tìm kiếm theo từ khóa liên quan:
Kỹ thuật lập trình Bài giảng Kỹ thuật lập trình Mảng con trỏ Kiểu con trỏ Con trỏ hàm Mảng một chiềuGợi ý tài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 260 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 202 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 192 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 161 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 151 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 117 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 114 0 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 107 0 0 -
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 trang 105 0 0 -
Giáo trình Nhập môn lập trình VB6: Phần 2
184 trang 86 0 0