Bài giảng Nhập môn Lập trình: Phần 5
lượt xem 10
download
Bài giảng Nhập môn Lập trình: Phần 5 - Con trỏ - Pointer giới thiệu tới các bạn về một số lý do nên sử dụng con trỏ; khai báo trong C; toán tử “&”; truyền tham số địa chỉ; con trỏ NULL; toán tử gán “=” con trỏ và mảng; chuỗi ký tự - String; cấu trúc - Struct.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Nhập môn Lập trình: Phần 5
- 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ị :: %hi\n", %hi\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* pp == &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%04X printf(“0x%04X %i %i 0x%04X 0x%04X %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%04X 2 printf(“0x%04X %i %i 0x%04X 0x%04X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); 0 pp ++; ++; … printf(“0x%04X printf(“0x%04X %i %i 0x%04X 0x%04X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); (*p) (*p) ++; ++; 0x16B2 printf(“0x%04X p printf(“0x%04X %i %i 0x%04X 0x%04X %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, calloc 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 (new) #include #include int int main() main() {{ int int *p *p == new new int[10]; int[10]; p[0] p[0] == 1; 1; p[3] p[3] == -7; -7; delete delete []p; []p; return return 0;0; }}
- Tóm lược 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 môn Lắp ráp và cài đặt máy tính - Bài 5. BIOS VÀ CMOS - Trường CĐ nghề CNTT iSPACE
10 p | 699 | 231
-
Bài Giảng Môn Lập Trình Website ASP.Net part 5
7 p | 291 | 153
-
Bài giảng Nhập môn điện toán - ĐH Bách khoa TP.HCM
140 p | 663 | 40
-
BÀI GIẢNG HỆ CHUYÊN GIA - ĐẠI HỌC HÀNG HẢI - 5
10 p | 154 | 26
-
NHẬP MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG - CHƯƠNG 5
15 p | 114 | 22
-
Bài giảng Nhập môn công nghệ phần mềm: Chương 5 - GV. Trương Minh Thái
34 p | 150 | 22
-
Bài giảng Lập trình Web bài 5: Tạo họa hình nâng cao
63 p | 130 | 17
-
Tin học đại cương - Bài 5
35 p | 105 | 11
-
Bài giảng Nhập môn chương trình dịch: Chương 5 - Hoàng Anh Việt
24 p | 97 | 8
-
Bài giảng Nhập môn lập trình: Chương 5 - Trần Minh Thái
52 p | 39 | 7
-
Bài giảng Nhập môn trí tuệ nhân tạo: Chương 5 - Văn Thế Thành
7 p | 94 | 6
-
Bài giảng Nhập môn công nghệ phần mềm: Chủ đề 5 - Lương Trần Hy Hiến
52 p | 57 | 5
-
Bài giảng Nhập môn java - Chương 5: Applet
35 p | 72 | 4
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