intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Con trỏ - Pointer

Chia sẻ: Codon_03 Codon_03 | Ngày: | Loại File: PPT | Số trang:34

76
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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. Để tìm hiểu sâu hơn về vấn đề này mời các bạn tham khảo "Bài giảng Con trỏ - Pointer". Cùng tìm hiểu để nắm bắt nội dung thông tin tài liệu.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Con trỏ - Pointer

  1. Con trỏ ­ Pointer
  2. 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
  3. 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
  4. 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;
  5. 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;
  6. 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; }}
  7. 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; }}
  8. 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)); }}
  9. 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ị :: %0xi\n", %0xi\n", *p); *p); return return 0;0; }}
  10. 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 *p *p == &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
  11. 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; }}
  12. 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%08X printf(“0x%08X %i %i 0x%08X 0x%08X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); return return 0; 0; }}
  13. 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%08X 2 printf(“0x%08X %i %i 0x%08X 0x%08X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); 0 pp ++; ++; … printf(“0x%08X printf(“0x%08X %i %i 0x%08X 0x%08X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); (*p) (*p) ++; ++; 0x16B2 printf(“0x%08X p printf(“0x%08X %i %i 0x%08X 0x%08X %i\n“, %i\n“, ); ); a, 0x15A0 0x15A2 a, a[0], a[0], p, p, *p); *p); return return 0;0; }}
  14. 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; }}
  15. 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 (memory­alloc), calloc (clear­alloc) 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  #include #include (new) int int main() main() {{ int int *p *p == malloc(10*sizeof(int)); malloc(10*sizeof(int)); p[0] p[0] == 1; 1; p[3] p[3] == -7; -7; free(p); free(p); return return 0;0; }}
  16. Tổng kết  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
  17. Chuỗi ký tự ­ String
  18. 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 
  19. 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];
  20. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2