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

kỹ thuật lập trình C chuyên nghiệp phần 4

24 5 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

Nội dung

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ả

C ttrỏ Con ỏ – Pointer P i t „ Khai báo „ Cá toán Các t tử “&”, ” “*”, ” “=”, “ ” “+” „ Nhắc lại truyền tham số địa „ Con trỏ mảng „ Cấ phát Cấp hát vùng ù nhớ hớ động độ C ttrỏ Con ỏ – Một Mộ sốố lý d nên ê sử dụng d „ „ „ Con trỏ kiểu liệu lưu trữ địa vùng liệu nhớ máy tính Kiểu ể trỏ cho phép phép:: … Truyền tham số kiểu địa … Biểu ể diễn ễ kiểu, ể cấu ấ trúc liệu động … Lưu trữ liệu vùng nhớ heap Con trỏ sử dụng hàm scanf C ttrỏ Con ỏ – Khai Kh i báo bá C Kiể trỏ Kiểu t ỏ phải hải đ đị h nghĩa định hĩ t ê ột kiểu kiể sở định nghĩa trước đó typedef kiểucơsở *Tênkiểu Tênkiểu; ; typedef int *PINT; //PINT // PINT kiểu trỏ - địa vùng nhớ kiểu int int PINT int x; p; //p, // p1: biế biến kiểu kiể int i t * *p1; C ttrỏ Con ỏ – Khai Kh i báo bá t C int *pi; long int *p; float* pf; char c, d, *pc; /* c d kiểu char pc trỏ đến char */ double* pd, e, f; char *start, *end; /* pd trỏ đến double e and f are double */ C ttrỏ Con ỏ - Toán T tử “& “&” „ “&”: toán tử lấy địa biến „ Địa tất biến chương trình định từ khai báo char g = 'z'; int { main() char c = 'a'; char *p; p = &c; p = &g; return 0; } p 0x1132 p 0x91A2 c 0x1132 'a' g 0x91A2 'z' C ttrỏ Con ỏ - Toán T tử “*” „ “*”: toán tử truy xuất giá trị vùng nhớ quản lý trỏ trỏ #include char g = 'z'; int main() () a { z char c = 'a'; char *p; p; p = &c; printf("%c\n", *p); p = &g; printf("%c\n", *p); return 0; } p 0x1132 p 91A2 0x91A2 c 0x1132 'a' g 0x91A2 xuất giá trị p quản lý ' ' 'z' C ttrỏ Con ỏ - Truyền T ề tham h số ố đị địa hỉ #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 C ttrỏ ỏ NULL „ Giá trị t ị đặc đặ biệt để hỉ ằ trỏ t ỏ không khô quản ả lý vùng ù Giá trị thường dùng để trỏ không hợp lệ 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; ; } C ttrỏ Con ỏ - Toán T tử gán “=” “ ” „ Có khác biệt ất quan trọng t thực th hiệ phép gán: gán : int i = 10, j = 14; int* p = &i; int *q = &j; *p = *q; p 15A0 0x15A0 q 0x15A4 i 10 14 0x15A0 j 14 0x15A4 và: int i = 10, j = 14; int *p p = &i; ; int *q = &j; p = q; p 0x15A4 0x15A0 q 0x15A4 i 0x15A0 j 10 14 0x15A4 L ệ tập Luyện tậ – Điề Điền vào ô trống ố int main(void) { int i = 10, 10 j = 14 14, k; int *p = &i; int *q = &j; *p += 1; p = &k; *p = *q; p = q; *p = *q; return 0; } i 0x2100 j 0x2104 k 0x1208 p 0x120B q 0x1210 C Con ttrỏ ỏ vàà Mả Mảng „ „ Biế kiểu Biến kiể mảng ả địa đị hỉ tĩnh tĩ h ủ ột vùng ù nhớ, hớ đ xác định khai báo, không thay đổi suốt chu kỳ sống sống Biến trỏ địa động vùng nhớ, nhớ xác định qua phép gán địa chương trình thực thi thi #include int main() { int a[10] = {1 {1, 3, 4, 2, 0}; int *p; p = a; //a = p: sai printf(“0x%04X i tf(“0 %04X %i 0x%04X %04X %i\ %i\n“, “ a, a[0], p, *p); return 0; } C ttrỏ Con ỏ - Toán T tử “+” “ ” với ới sốố nguyên ê #include int main() { short a[10] = {1, 3, 5, 2, 0}; short *p = a; printf(“0x%04X printf( 0x%04X %i 0x%04X %i\n“ %i\n , a, a[0], p, *p); p ++; printf(“0x%04X i tf(“0 %04X %i 0x%04X %04X %i\ %i\n“, “ a, a[0], p, *p); (*p) ++; printf(“0x%04X %i 0x%04X %i\n“, a, a[0], p, *p); return 0; } 0x15A0 a … 0x16B2 p 0x15A0 0x15A2 C ttrỏ Con ỏ - Luyện L ệ tập ậ #include int main() { int a[10] = {2, 3, 5, 1, 4, 7, 0}; int *p = a; printf(“%i printf( %i %i\n“ %i\n , a[0], a[0] *p); p ++; printf(“%i %i\n“, *p, p[2]); p ++; ++ a[2] [2] = 9; printf(“%i %i\n“, p[1], *p); p -= 2; printf(“%i %i\n”, p[3], p[1]); return 0; } 1 C ttrỏ Con ỏ - Cấp Cấ phát há vùng ù nhớ hớ động độ „ „ Có thể hỉ định đị h vùng ù ới cho h trỏ t ỏ quản ả lý bằ lệnh hàm malloc malloc,, calloc tốn tử new C++ Vùng nhớ lập trình viên định phải giải phóng lệnh free (malloc, calloc) 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ấ phát Cấp hát động độ : malloc() động: malloc ll () vàà calloc() calloc ll () „ Hà malloc Hàm ll vàà calloc ll cho h phép cấp ấ phát hát vùng ù nhớ hớ lúc chạy chương trình trình void **malloc malloc(( size_t size); void **calloc calloc(( size_t nItems nItems,, size_t size); „ Hàm calloc ll cấp ấ phát h vùng nhớ h khởi kh i tạo tất ấ bit bi vùng nhớ cấp phát „ Hàm malloc cấp phát vùng nhớ nhớ Ví d dụ 11: dùng dù malloc() ll () 1 7 10 11 12 #include

Ngày đăng: 08/05/2021, 19:20