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

Bài giảng Nhập môn Lập trình: Phần 5

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

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

Bài giảng Nhập môn Lập trình: Phần 5 - Con trỏ - Pointer giới thiệu tới các bạn về một số lý do nên sử dụng con trỏ; khai báo trong C; toán tử “&”; truyền tham số địa chỉ; con trỏ NULL; toán tử gán “=” con trỏ và mảng; chuỗi ký tự - String; cấu trúc - Struct.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Nhập môn Lập trình: Phần 5

  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ị :: %hi\n", %hi\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* pp == &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%04X printf(“0x%04X %i %i 0x%04X 0x%04X %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%04X 2 printf(“0x%04X %i %i 0x%04X 0x%04X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); 0 pp ++; ++; … printf(“0x%04X printf(“0x%04X %i %i 0x%04X 0x%04X %i\n“, %i\n“, ); ); a, a, a[0], a[0], p, p, *p); *p); (*p) (*p) ++; ++; 0x16B2 printf(“0x%04X p printf(“0x%04X %i %i 0x%04X 0x%04X %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, calloc 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  (new) #include #include int int main() main() {{ int int *p *p == new new int[10]; int[10]; p[0] p[0] == 1; 1; p[3] p[3] == -7; -7; delete delete []p; []p; return return 0;0; }}
  16. Tóm lược  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