Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 34 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
34
Dung lượng
706,5 KB
Nội dung
Con trỏ - Pointer Con trỏ – Pointer Khai báo Các toán tử “&”, “*”, “=”, “+” Nhắc lại truyền tham số địa Con trỏ mảng Cấp phát vùng nhớ động Con trỏ – Một số lý nên sử dụng 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: 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 Con trỏ – Khai báo C Kiểu trỏ phải định nghĩa kiểu sở định nghĩa trước typedef kiểucơsở *Tênkiểu; typedef int *PINT; //PINT kiểu trỏ - địa vùng nhớ kiểu int int PINT int x; p; //p, p1: biến kiểu int * *p1; Con trỏ – Khai báo C int int *pi; *pi; long long int int *p; *p; float float char char *pf; *pf; c, c, d, d, *pc; *pc; /* /* cc và dd kiểu kiểu char char pc pc là con trỏ trỏ đến đến char char */ */ double double *pd, *pd, e, e, f; f; char char /* /* pd pd là ee and and *start, *start, *end; *end; con trỏ trỏ đến đến double double ff are are double double */ */ Con trỏ - Toán tử “&” “&”: toán tử lấy địa biến Địa tất biến chương trình định từ khai báo char char gg == 'z'; 'z'; int int main() main() {{ char char cc == 'a'; 'a'; char char *p; *p; pp == &c; &c; pp == &g; &g; return return 0; 0; }} p 0x1132 p 0x91A2 c 0x1132 'a' g 0x91A2 'z' Con trỏ - Toán tử “*” “*”: toán tử truy xuất giá trị vùng nhớ quản lý trỏ #include #include char char gg == 'z'; 'z'; int int main() main() {{ char char cc == 'a'; 'a'; char char *p; *p; pp == &c; &c; printf("%c\n", printf("%c\n", pp == &g; &g; printf("%c\n", printf("%c\n", return return 0; 0; }} aa zz *p); *p); *p); *p); p 0x1132 p 0x91A2 c 0x1132 'a' g 0x91A2 xuất giá trị p quản lý 'z' Con trỏ - Truyền tham số địa #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 để trỏ không quản lý vùng Giá trị thường dùng để 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ỏ else else printf(“Giá printf(“Giá trị trị return return 0; 0; }} không không hợp hợp lệ!\n"); lệ!\n"); :: %0xi\n", %0xi\n", *p); *p); Con trỏ - Toán tử gán “=” Có khác biệt quan trọng thực phép gán: int int int int int int ii == 10, 10, jj == 14; 14; *p *p == &i; &i; *q *q == &j; &j; *p *p == *q; *q; p 0x15A0 q 0x15A4 i 10 14 0x15A0 j 14 0x15A4 và: int int int int int int ii == 10, 10, jj == 14; 14; *p *p == &i; &i; *q *q == &j; &j; pp == q; q; p 0x15A4 0x15A0 q 0x15A4 i 0x15A0 j 10 14 0x15A4 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' last_name 'M' 'i' 'n' 'o' 'r' other 'T' 'o' ‘n’ 'y' 32 'B' 'l' 'u' 'n' 'u' 'l' characters 'N' 'o' 32 'l' 'r' 't' Chuỗi ký tự - Nhập / xuất Có thể nhập / xuất chuỗi ký tự s cách nhập ký tự s Hoặc sử dụng hàm scanf printf với ký tự định dạng “%s” char char other[] other[] == "Tony "Tony Blurt"; Blurt"; printf("%s\n", printf("%s\n", other); other); Nhập chuỗi có khoảng trắng dùng hàm gets char char name[100]; name[100]; printf("Nhap printf("Nhap mot mot chuoi chuoi ky ky tu tu %s: %s: "); "); gets(name); gets(name); scanf and gets have a potential overflow problem (use fgets(s, len, stdin) instead to specify the maximum buffer) Lưu ý: kết thúc chuỗi #include #include int int main() main() {{ char char other[] other[] == "Tony "Tony Blurt"; Blurt"; "Blurt" không in printf("%s\n", printf("%s\n", other); other); other[4] other[4] == '\0'; '\0'; printf("%s\n", printf("%s\n", other); other); }} Tony Tony Blurt Blurt Tony Tony return return 0; 0; other 'T' 'o' ‘n’ 'y' 32 'B' 'l' 'u' 'r' 't' Chuỗi ký tự – Một số hàm thư viện Lấy độ dài chuỗi l = strlen(s); Đổi toàn ký tự chuỗi thành IN HOA strupr(s); Đổi toàn ký tự chuỗi thành in thường strlwr(s); Chuỗi ký tự – Một số hàm thư viện So sánh chuỗi: so sánh theo thứ tự từ điển Phân biệt IN HOA – in thường: int strcmp(const char *s1, const char *s2); Không phân biệt IN HOA – in thường: int stricmp(const char *s1, const char *s2); Chuỗi ký tự – ví dụ strcmp #include #include #include #include Minor Minor