kỹ thuật lập trình C chuyên nghiệp phần 4
lượt xem 6
download
Tham khảo tài liệu 'kỹ thuật lập trình c chuyên nghiệp phần 4', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: kỹ thuật lập trình C chuyên nghiệp phần 4
- Con trỏ – Pointer Khai Khai báo Cá Các toán tử “&”, “*”, “=”, “+” Nh Nhắc lại về truyền tham số địa chỉ Con Con trỏ và mảng Cấp phát vùng nhớ động hát
- Con trỏ – Một số lý do nên sử dụng lý Con 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: Ki hép: Truy Truyền tham số kiểu địa chỉ Biểu diễn các kiểu, cấu trúc dữ liệu động Bi Lưu trữ dữ liệu trong vùng nhớ heap Con Con trỏ đã được sử dụng trong hàm scanf
- Con trỏ – Khai báo trong C bá Kiểu con trỏ phải được định nghĩa trên một kiểu cơ sở đã h đượ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 là int x; PINT p; //p, p1: biến kiểu int * // bi ki int *p1;
- Con trỏ – Khai báo trong C bá int *pi; long int *p; int float* pf; char c, d, *pc; /* c và d kiểu char pc là con trỏ đến char */ double* pd, e, f; /* pd là con trỏ đến double e and f are double */ char *start, *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 g = 'z'; p c int main() 'a' 0x1132 { 0x1132 char c = 'a'; char *p; g p p = &c; &c; 'z' 0x91A2 p = &g; 0x91A2 return 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 p c char g = 'z'; 'a' 0x1132 int main() 0x1132 a { z char c = 'a'; g p char *p; 'z' 0x91A2 p = &c; 0x91A2 printf("%c\n", *p); xuất giá trị do p đang giá tr do p = &g; &g; quản lý printf("%c\n", *p); return 0; }
- Con trỏ - Truyền tham số địa chỉ đị #include void change(int *v); int main() { int var = 5; change(&var); printf("main: var = %i\n", var); return 0; } void change(int *v) { (*v) *= 100; printf("change: *v = %i\n", (*v)); }
- Con trỏ NULL NULL Giá Giá trị đặc biệt để chỉ rằng con trỏ không quản lý vùng nào. nào. Giá trị này thường được dùng để chỉ một con trỏ không hợp lệ. #include int main() { int i = 13; short *p = NULL; if (p == NULL) printf(“Con trỏ không hợp lệ!\n"); else printf(“Giá trị : %hi\n", *p); return 0; }
- Con trỏ - Toán tử gán “=” Có Có sự khác biệt rất quan trọng khi thực hiện các phép gán: hé n: p i int i = 10, j = 14; 10 14 0x15A0 int* p = &i; 0x15A0 int *q = &j; q j 14 0x15A4 *p = *q; 0x15A4 và: p 0x15A4 i int i = 10, j = 14; 10 0x15A0 int *p = &i; 0x15A0 int *q = &j; q j 14 0x15A4 p = q; q; 0x15A4
- Luyện tập – Điền vào ô trống int main(void) i { 0x2100 int i = 10, j = 14, k; 10 14 k; j int *p = &i; 0x2104 int *q = &j; k *p += 1; 0x1208 p = &k; p *p = *q; p = q; 0x120B *p = *q; q 0x1210 return 0; }
- Con trỏ và Mảng Bi 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. ng. Bi Biến con trỏ là địa chỉ động của một vùng nhớ, được xác định qua phép gán địa chỉ khi chương trình thực thi. thi. #include
- Con trỏ - Toán tử “+” với số nguyên 0x15A0 a #include 1 int main() { 4 3 short a[10] = {1, 3, 5, 2, 0}; 5 short *p = a; 2 printf( printf(“0x%04X %i 0x%04X %i\n“, %i 0x%04X %i a, a[0], p, *p); 0 p ++; … printf(“0x%04X %i 0x%04X %i\n“, %i %i a, a[0], p, *p); (*p) ++; 0x16B2 p printf(“0x%04X %i 0x%04X %i\n“, 0x15A0 0x15A2 a, a[0], p, *p); return 0; }
- Con trỏ - Luyện tập #include 2 2 int main() 3 1 { 1 9 int a[10] = {2, 3, 5, 1, 4, 7, 0}; 1 3 int *p = a; printf( printf(“%i %i\n“, a[0], *p); %i a[0] *p); p ++; printf(“%i %i\n“, *p, p[2]); p ++; a[2] = 9; ++ printf(“%i %i\n“, p[1], *p); p -= 2; printf(“%i %i\n”, p[3], p[1]); return 0; }
- Con trỏ - Cấp phát vùng nhớ động độ Có 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++ malloc, Vùng 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 int main() { int *p = new int[10]; p[0] = 1; p[3] = -7; 7; delete []p; return 0; }
- Cấp phát động: malloc() và calloc() ng: () Hà Hàm malloc và calloc cho phép cấp phát các vùng nhớ hé hát ngay trong lúc chạy chương trình. trình. void *malloc( size_t size); *malloc( void *calloc( size_t nItems, size_t size); *calloc( nItems, Hàm Hàm calloc cấp phát vùng nhớ và khởi tạo tất cả các bit h bi trong vùng nhớ mới cấp phát về 0. Hàm Hàm malloc chỉ cấp phát vùng nhớ.
- Ví dụ 1: dùng malloc() Ví dù #include 1. #include
- Ví dụ 1: (tt) Ví (tt) /* copy "Hello" into string */ 13. strcpy(str, "Hello"); "Hello"); 14. /* display string */ 15. printf("String is %s\n", str); str); 16. /* free memory */ 17. free(str); 18. return 0; 19. } 20.
- Ví Ví dụ 2: calloc() #include 1. #include
- Ví Ví dụ 2: calloc() /* display string */ 11. printf("String is %s\n", str); str); 12. /* free memory */ 13. free(str); free(str); 14. return 0; 15. } 16.
- Giải phóng vùng nhớ Gi Khi Khi thoát khỏi hàm, các biến khai báo trong hàm sẽ “biến m, mất”. Tuy nhiên các vùng nhớ được cấp phát động vẫn còn t”. tồn tại và được “đánh dấu” là đang “được dùng” bộ nhớ là của máy tính sẽ hết. t. ví ví dụ: void aFunction(void) aFunction(void) { int *tmpArray, i = 5; tmpArray, tmpArray = (int *)malloc(i * sizeof(int)); sizeof } tmpArray tmpArray i
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Tuyển tập 250 bài tập kỹ thuật lập trình C
343 p | 571 | 124
-
Kỹ thuật lập trình C/C++-Chương: Cơ bản về C++
23 p | 208 | 33
-
Kỹ thuật lập trình C/C++-Chương: Hàm
21 p | 175 | 23
-
Kỹ thuật lập trình C/C++-Chương: Câulệnh
21 p | 83 | 14
-
Kỹ thuật lập trình C/C++-Chương: Định nghĩa chồng hàm
21 p | 140 | 14
-
Tài liệu ôn thi tốt nghiệp môn cơ sở: Phần Kỹ thuật lập trình C - ThS. Trần Ngọc Bảo
4 p | 162 | 10
-
Giáo trình Kỹ thuật lập trình C căn bản và nâng cao - NXB Bách khoa Hà Nội: Phần 2
236 p | 13 | 10
-
kỹ thuật lập trình C chuyên nghiệp phần 10
18 p | 142 | 9
-
kỹ thuật lập trình C chuyên nghiệp phần 3
22 p | 74 | 7
-
kỹ thuật lập trình C chuyên nghiệp phần 2
0 p | 67 | 7
-
kỹ thuật lập trình C chuyên nghiệp phần 7
14 p | 63 | 6
-
kỹ thuật lập trình C chuyên nghiệp phần 8
17 p | 59 | 6
-
kỹ thuật lập trình C chuyên nghiệp phần 9
16 p | 92 | 6
-
Bài giảng Kỹ thuật lập trình C: Bài 2 - Hoàng Quốc Tuấn
34 p | 22 | 6
-
Giáo trình Kỹ thuật lập trình C căn bản và nâng cao - NXB Bách khoa Hà Nội: Phần 1
202 p | 9 | 6
-
kỹ thuật lập trình C chuyên nghiệp phần 6
16 p | 73 | 5
-
kỹ thuật lập trình C chuyên nghiệp phần 5
15 p | 80 | 5
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