Bài giảng Con trỏ - Pointer
lượt xem 4
download
Con trỏ là kiểu dữ liệu lưu trữ địa chỉ của các vùng dữ liệu trong bộ nhớ máy tính. Để tìm hiểu sâu hơn về vấn đề này mời các bạn tham khảo "Bài giảng Con trỏ - Pointer". Cùng tìm hiểu để nắm bắt nội dung thông tin tài liệu.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Con trỏ - Pointer
- Con trỏ Pointer
- Con trỏ – Pointer Khai báo Các toán tử “&”, “*”, “=”, “+” Nhắc lại về truyền tham số địa chỉ Con trỏ và mảng Cấp phát vùng nhớ động
- Con trỏ – Một số lý do nên sử dụng Con trỏ là kiểu dữ liệu lưu trữ địa chỉ của các vùng dữ liệu trong bộ nhớ máy tính Kiểu con trỏ cho phép: Truyền tham số kiểu địa chỉ Biểu diễn các kiểu, cấu trúc dữ liệu động Lưu trữ dữ liệu trong vùng nhớ heap Con trỏ đã được sử dụng trong hàm scanf
- Con trỏ – Khai báo trong C Kiểu con trỏ phải được định nghĩa trên một kiểu cơ sở đã được định nghĩa trước đó. typedef kiểucơsở *Tênkiểu; typedef int *PINT; //PINT là kiểu con trỏ địa chỉ vùng nhớ kiểu int int x; PINT p; //p, p1: biến kiểu int * int *p1;
- Con trỏ – Khai báo trong C int int *pi; *pi; long long int int *p; *p; float float *pf; *pf; char char c, c, d, d, *pc; *pc; /* /* cc và và dd kiểu kiểu char char pc pc là là con con trỏ trỏ đến đến char char */ */ double double *pd, *pd, e, e, f; f; /* /* pd pd là là con con trỏ trỏ đến đến double double ee and and ff are are double double */*/ char char *start, *start, *end; *end;
- Con trỏ Toán tử “&” “&”: toán tử lấy địa chỉ của 1 biến Địa chỉ của tất cả các biến trong chương trình đều đã được chỉ định từ khi khai báo char char gg == 'z'; 'z'; p c int int main() main() {{ 0x1132 'a' 0x1132 char char cc == 'a'; 'a'; char char *p; *p; p g pp == &c; &c; 0x91A2 'z' pp == &g; &g; 0x91A2 return return 0; 0; }}
- Con trỏ Toán tử “*” “*”: toán tử truy xuất giá trị của vùng nhớ được quản lý bởi con trỏ. #include #include p c char char gg == 'z'; 'z'; 0x1132 'a' int int main() main() aa 0x1132 {{ zz char char cc == 'a'; 'a'; p g char char *p; *p; 0x91A2 'z' pp == &c; &c; 0x91A2 printf("%c\n", printf("%c\n", *p); *p); pp == &g; xuất giá trị do p đang &g; printf("%c\n", *p); quản lý printf("%c\n", *p); return return 0; 0; }}
- Con trỏ Truyền tham số địa chỉ #include #include void void change(int change(int *v); *v); int int main() main() {{ int int var var == 5; 5; change(&var); change(&var); printf("main: printf("main: var var == %i\n", %i\n", var); var); return return 0; 0; }} void voidchange(int change(int *v) *v) {{ (*v) (*v) *= *= 100; 100; printf("change: printf("change: *v *v == %i\n", %i\n", (*v)); (*v)); }}
- Con trỏ NULL Giá trị đặc biệt để chỉ rằng con trỏ không quản lý vùng nào. Giá trị này thường được dùng để chỉ một con trỏ không hợp lệ. #include #include int int main() main() {{ int int ii == 13; 13; short short *p *p == NULL; NULL; if if (p (p == == NULL) NULL) printf(“Con printf(“Con trỏtrỏ không không hợp hợp lệ!\n"); lệ!\n"); else else printf(“Giá printf(“Giá trịtrị :: %0xi\n", %0xi\n", *p); *p); return return 0;0; }}
- Con trỏ Toán tử gán “=” Có sự khác biệt rất quan trọng khi thực hiện các phép gán: p i int int ii == 10, 10, jj == 14; 14; 0x15A0 10 14 int int *p *p == &i; &i; 0x15A0 int int *q *q == &j; &j; q j 0x15A4 14 *p *p == *q; *q; 0x15A4 và: int ii == 10, p 0x15A4 i int 10, jj == 14; 14; int *p 0x15A0 10 int *p == &i; &i; int *q 0x15A0 int *q == &j; &j; q j 0x15A4 14 pp == q; q; 0x15A4
- Luyện tập – Điền vào ô trống int int main(void) main(void) i {{ 0x2100 int int ii == 10, 10, jj == 14, 14, k; k; int int *p *p == &i; &i; j int int *q *q == &j; &j; 0x2104 k *p *p += += 1;1; 0x1208 pp == &k; &k; *p *p == *q; *q; p pp == q; q; 0x120B *p *p == *q; *q; q return 0x1210 return 0; 0; }}
- Con trỏ và Mảng Biến kiểu mảng là địa chỉ tĩnh của một vùng nhớ, được xác định khi khai báo, không thay đổi trong suốt chu kỳ sống. Biến con trỏ là địa chỉ động của một vùng nhớ, được xác định qua phép gán đ #include ịa chỉ khi chương trình thực thi. #include int int main() main() {{ int int a[10] a[10] == {1, {1, 3,3, 4, 4, 2, 2, 0}; 0}; int int *p; *p; pp == a; a; //a //a == p: p: sai sai printf(“0x%08X printf(“0x%08X %i %i 0x%08X 0x%08X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); return return 0; 0; }}
- Con trỏ Toán tử “+” với số nguyên 0x15A0 #include a #include int intmain() main() 1 {{ 4 3 short short a[10] a[10] == {1, {1, 3, 3, 5, 5, 2, 2, 0}; 0}; 5 short short *p *p == a; a; printf(“0x%08X 2 printf(“0x%08X %i %i 0x%08X 0x%08X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); 0 pp ++; ++; … printf(“0x%08X printf(“0x%08X %i %i 0x%08X 0x%08X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); (*p) (*p) ++; ++; 0x16B2 printf(“0x%08X p printf(“0x%08X %i %i 0x%08X 0x%08X %i\n“, %i\n“, ); ); a, 0x15A0 0x15A2 a, a[0], a[0], p, p, *p); *p); return return 0;0; }}
- Con trỏ Luyện tập #include #include int intmain() main() 22 22 {{ 33 11 int int a[10] a[10] == {2, {2, 3, 3, 5, 5, 1, 1, 4, 4, 7, 7, 0}; 0}; 11 99 int int *p *p == a;a; 11 33 printf(“%i printf(“%i %i\n“, %i\n“, a[0], a[0], *p); *p); pp ++; ++; printf(“%i printf(“%i %i\n“, %i\n“, *p, *p, p[2]); p[2]); pp ++; ++; a[2] a[2] == 9; 9; printf(“%i printf(“%i %i\n“, %i\n“, p[1], p[1], *p); *p); pp -= -= 2; 2; printf(“%i printf(“%i %i\n”, %i\n”, p[3], p[3], p[1]); p[1]); return return 0; 0; }}
- Con trỏ Cấp phát vùng nhớ động Có thể chỉ định vùng mới cho 1 con trỏ quản lý bằng các lệnh hàm malloc (memoryalloc), calloc (clearalloc) hoặc toán tử new của C++ Vùng nhớ do lập trình viên chỉ định phải được giải phóng bằng lệnh free (malloc, calloc) hoặc toán tử delete #include #include (new) int int main() main() {{ int int *p *p == malloc(10*sizeof(int)); malloc(10*sizeof(int)); p[0] p[0] == 1; 1; p[3] p[3] == -7; -7; free(p); free(p); return return 0;0; }}
- Tổng kết Khai báo Các toán tử “&”, “*”, “=”, “+” Nhắc lại về truyền tham số địa chỉ Con trỏ và mảng Cấp phát vùng nhớ động
- Chuỗi ký tự String
- Chuỗi ký tự – Strings Một số qui tắc Nhập / xuất Con trỏ và chuỗi ký tự Một số hàm thư viện
- Chuỗi ký tự Một số qui tắc Chuỗi ký tự là mảng một chiều có mỗi thành phần là một số nguyên được kết thúc bởi số 0. Ký tự kết thúc (0) ở cuối chuỗi ký tự thường được gọi là ký tự null (không giống con trỏ NULL). Có thể ghi là 0 hoặc ‘\0’ (không phải chữ o). Được khai báo và truyền tham số như mảng một chiều. char char s[100]; s[100]; unsigned unsigned char char s1[1000]; s1[1000];
- Chuỗi ký tự Ví dụ char char first_name[5] first_name[5] == {{ 'J', 'J', 'o', 'o', 'h', 'h', 'n', 'n', '\0' '\0' }; }; char char last_name[6] last_name[6] == "Minor"; "Minor"; char char other[] other[] == "Tony "Tony Blurt"; Blurt"; char char characters[7] characters[7] == "No "No null"; null"; first_name 'J' 'o' 'h' 'n' 0 last_name 'M' 'i' 'n' 'o' 'r' 0 other 'T' 'o' ‘n’ 'y' 32 'B' 'l' 'u' 'r' 't' 0 characters 'N' 'o' 32 'n' 'u' 'l' 'l' 0
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Nhập môn lập trình: Bài 14 - Con trỏ
93 p | 82 | 11
-
Bài giảng Kỹ thuật lập trình: Bài 10 - Phạm Đình Sắc
14 p | 112 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Ôn tập - ĐHKHTN
22 p | 123 | 8
-
Bài giảng Tin học cơ sở 4 - Bài 8: Con trỏ
34 p | 27 | 6
-
Bài giảng Cơ sở dữ liệu giải thuật: Bài 10 - Con trỏ và mảng động
58 p | 65 | 6
-
Bài giảng Lập trình cơ bản: Bài 6 - Chu Thị Hường
38 p | 10 | 5
-
Bài giảng Kỹ thuật lập trình C: Bài 7 - Hoàng Quốc Tuấn
43 p | 27 | 4
-
Bài giảng Tin học đại cương - Bài 4: Con trỏ và mảng
50 p | 72 | 4
-
Bài giảng Lập trình nâng cao: Bài 10 - Hoàng Thị Điệp
58 p | 45 | 4
-
Bài giảng Phương pháp lập trình hướng đối tượng: Hàm dựng, hàm hủy - Ba vấn đề con trỏ trong kế thừa
20 p | 75 | 4
-
Bài giảng Con trỏ và quản lý bộ nhớ động - Hoàng Thân Anh Tuấn
11 p | 59 | 4
-
Bài giảng Tin học đại cương Phần 2: Bài 4 - Nguyễn Hữu Nam Dương
25 p | 67 | 3
-
Bài giảng Tin học đại cương Phần 2: Bài 4 - Nguyễn Thành Kiên
33 p | 77 | 3
-
Bài giảng Nguyên lý lập trình hướng đối tượng: Bài 8 - TS. Lý Anh Tuấn
45 p | 28 | 2
-
Bài giảng Cơ sở lập trình: Kiểu con trỏ
50 p | 3 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p | 10 | 2
-
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 | 0 | 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 | 1 | 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