1. Trang chủ
  2. » Thể loại khác

Con trỏ - Pointer

34 2 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

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

Ngày đăng: 11/10/2022, 00:14

w