1. Trang chủ
  2. » Công Nghệ Thông Tin

he thong may tinh va ngon ngu c nguyen phuc khai chuong 12 cuuduongthancong com

83 3 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

Thông tin cơ bản

Định dạng
Số trang 83
Dung lượng 1,66 MB

Nội dung

.c om ng co an th ng du o u cu Company LOGO CuuDuongThanCong.com https://fb.com/tailieudientucntt Các nội dung: c om ng co an th ng du o u     Khái niệm Thao tác POINTER POINTER mảng Đối số hàm pointer - truyền đối số theo số dạng tham số biến Hàm trả pointer mảng Chuỗi ký tự Pointer việc định vị nhớ động Mảng pointer cu     CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt ng u du o ng th an co Pointer pointer Đối số hàm MAIN Pointer trỏ đến hàm Ứng dụng cu     c om Các nội dung: CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt KHÁI NIỆM cu u du o ng th an co ng c om  Một biến có kiểu pointer lưu liệu nó, địa đối tượng khảo sát Đối tượng biến, chuỗi hàm CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt KHÁI NIỆM c om  Ví dụ 13.1: Chương trình đổi trị cu u du o ng th an co ng #include void Swap (int doi_1, int doi_2); main() { int a = 3, b = 4; printf (“Trước gọi hàm, a = %d, b = %d.\n”,a,b); Swap (a, b); // Gọi hàm đổi trị printf (“Sau gọi hàm, a = %d, b = %d.\n”,a,b);} void Swap (int doi_1, int doi_2) { int temp = doi_1; doi_1 = doi_2 ; doi_2 = temp ; } CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt cu u du o  Hình ảnh stack thực thi điều khiển chương trình dòng doi_1 = doi_2 ; ng th an co ng c om KHÁI NIỆM CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt du o ng th an co ng c om KHÁI NIỆM cu u  Hình ảnh stack thực thi điều khiển đến cuối chương trình CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt THAO TÁC TRÊN POINTER co ng c om  Cú pháp để khai báo biến pointer: kiểu *tên_biến_pointer  Với: an kiểu kiểu bất kỳ, xác định kiểu liệu ghi vào đối tượng mà trỏ trỏ đến tên_biến_pointer tên biến trỏ, danh hiệu hợp lệ u cu  du o ng th  CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt THAO TÁC TRÊN POINTER cu u du o ng th an co ng c om  Biến đối tượng mà trỏ trỏ đến truy xuất qua tên biến trỏ dấu "*" trước biến trỏ, cú pháp cụ thể sau: * tên_biến_con_trỏ CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt THAO TÁC TRÊN POINTER cu u du o ng th an co ng c om  Khai báo biến pointer - pointer hằng:  Trong ngôn ngữ C, toán tử lấy địa biến làm việc, toán tử dấu & (ampersand), tạm gọi toán tử lấy địa Cú pháp sau: & biến  với biến biến thuộc kiểu bất kỳ, không biến ghi CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 10 MẢNG CÁC POINTER an co ng c om  Một mảng pointer khởi động trị mảng mảng toàn cục hay mảng tĩnh  Ví dụ: cu u du o ng th static char *thu[7] = {"Thu 2", "Thu 3", "Thu 4", "Thu 5", "Thu 6", "Thu 7", "Chua nhat"}; CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 69 POINTER CỦA POINTER cu u du o ng th an co ng c om  Cú pháp khai báo pointer sau: kiểu ** tên_pointer  Ví dụ: int **pint; int*p; int a[4][4];  pint = &p; pint = (int **) &a; CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 70 cu u du o ng th an co ng c om POINTER CỦA POINTER  Thay truy xuất a[i][j], ta truy xuất *(pint + m*i + j), với m số phần tử hàng mảng hai chiều CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 71 POINTER CỦA POINTER cu u du o ng th an co ng c om #include #define MAX_ROW #define MAX_COL main() { int row, col; int *pint1; int a2d [MAX_ROW][MAX_COL] = { {0, 1, 2}, {10, 11, 12}, {20, 21, 22} }; int **pint2; int (*pa2d)[MAX_ROW][MAX_COL]; /* Thu dia chi cua pointer va mang chieu */ CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 72 POINTER CỦA POINTER cu u du o ng th an co ng c om pint1 = a2d[1]; pa2d = &a2d; pint2 = (int **)&a2d; printf ("pint1 = a2d[1] = %p\n", pint1); printf ("*( *( ( int (*)[MAX_COL] ) pint2 + 1)+ 2)= %d\n", *( *( ( int (*)[MAX_COL] ) pint2 + 1)+ 2)); printf ("*( *(a2d + 1) + 2) = %d\n", *( *(a2d + 1) + 2)); printf ("*pint1[2] = %d\n", pint1[2]); printf ("(*pa2d)[1][2] = %d\n", (*pa2d)[1][2]); printf ("Tri cua cac phan tu mang truy xuat qua pointer lan:\n"); CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 73 POINTER CỦA POINTER cu u du o ng th an co ng c om for (row = 0; row < MAX_ROW; row ++) { for (col = 0; col < MAX_COL; col ++) printf ("%d ", *( *( ( int (*)[MAX_COL] ) pint2 + row)+ col)); printf ("\n"); } getchar();} CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 74 POINTER CỦA POINTER c om  Ví dụ: ng th an co ng int *m[4]; int a = 1, b = 2, c = 3, d = 4; int **pint; pint = m; m[0] = &a; m[1] = &b; m[2] = &c; m[3] = &d; cu u du o  Thay truy xuất trực tiếp a, b, , ta dùng pointer *(pint[i]) CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 75 POINTER CỦA POINTER c om  Ví dụ: cu u du o ng th an co ng int ** pi; int * pint[4]; int a[3], b[3], c[3], d[3]; pi = pint; pint[0] = a; pint[1] = b; pint[2] = c; pint[3] = d; CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 76 cu u du o ng th an co ng c om POINTER CỦA POINTER CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 77 ĐỐI SỐ CỦA HÀM MAIN co ng c om  C hoàn toàn cho phép việc nhận đối số vào hàm main(), có hai đối số C quy định theo thứ tự: an int agrc: đối số cho biết số tham số nhập, kể tên chương trình char *argv[]: mảng pointer trỏ đến chuỗi tham số theo sau tên chương trình chạy chương trình từ DOS du o u cu  ng th  CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 78 ĐỐI SỐ CỦA HÀM MAIN cu u du o ng th an co ng c om #include #include main (int argc, char *argv[]) { int i; clrscr(); printf ("Cac doi so cua chuong trinh la: \n"); printf ("Ten chuong trinh la: %s \n", argv[0]); if ( argc >1 ) for (i = 1; i < argc; i++) printf ("Doi so thu %d: %s \n", i, argv[i]); getch(); } CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 79 ĐỐI SỐ CỦA HÀM MAIN c om  Nếu nhập từ bàn phím sau: ng C:\>thu_main tin thu 123 co  chương trình cho xuất liệu là: cu u du o ng th an Cac doi so cua chuong trinh la: Ten chuong trinh la: C:\thu_main.exe Doi so thu 1: tin Doi so thu 2: thu Doi so thu 3: 123 CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 80 POINTER TRỎ ĐẾN HÀM cu u du o ng int cong (int a, int b) { } th an co ng c om  Cú pháp khai báo pointer tới hàm: kiểu (* tên_pointer) (kiểu_các_đối_số);  Nếu khai báo int (* p_function) (int, int);  có hàm  Ta có thể: p_function = cong; tong = (*p_function) (m, n); © TS Nguyễn Phúc Khải CuuDuongThanCong.com https://fb.com/tailieudientucntt 81 Bài tập cu u du o ng th an co ng c om  Viết chương trình nhập vào dãy số nguyên (chưa biết có số nguyên) Loại bỏ số nguyên bị lặp lại In dãy số CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 82 .c om ng co an th ng du o u cu CuuDuongThanCong.com © TS Nguyễn Phúc Khải https://fb.com/tailieudientucntt 83 ... CuuDuongThanCong. com © TS Nguyễn Ph? ?c Khải https://fb .com/ tailieudientucntt du o ng th an co ng c om KHÁI NIỆM cu u  Hình ảnh stack th? ?c thi điều khiển đến cuối chương trình CuuDuongThanCong. com © TS Nguyễn... Trong C, thao t? ?c th? ?c nhờ hàm strcpy(), hàm c? ? prototype file string.h sau: char *strcpy(char *dest, const char *src); CuuDuongThanCong. com © TS Nguyễn Ph? ?c Khải https://fb .com/ tailieudientucntt... getch(); } CuuDuongThanCong. com © TS Nguyễn Ph? ?c Khải https://fb .com/ tailieudientucntt 44 CHUỖI KÝ TỰ cu u du o ng th an co ng c om  Nhập trị chuỗi:  Vi? ?c nhập trị cho chuỗi bao gồm hai bư? ?c:

Ngày đăng: 27/12/2022, 08:53