Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
25
Dung lượng
201,69 KB
Nội dung
Lê Thúy Ngọc 1 Con trỏ Lê Thúy Ngọc Lê Thúy Ngọc 2 Biến int a; a = 5; Tên biến: a KDL: int Giá trị: giá trị rác <14> 0101 000000000000 <18> Lê Thúy Ngọc 3 Biến Mang tính định lượng: có thể cân, đong, đo, đếm, so sánh, … VD: int a = 5, b = 30; if (a == b) b = 15; a = b; Lê Thúy Ngọc 4 Biến con trỏ 1. Định nghĩa: là 1 biến dùng để chứa địa chỉ của1 biến khác. 2. Có nhiều KDL => có nhiềukiểu con trỏ 3. Không mang tính định lượng 4. Mang tính chỉ mục 5. Kích thướccủabiến con trỏ là 2B (DOS) và 4B (Win) Lê Thúy Ngọc 5 Khai báo biến con trỏ <KDL> *<tên biến>; VD: int *p; //p là biến con trỏ, trỏ tớikiểuint char *q; - q là 1 biến con trỏ - q trỏ tới1 biếnkiểu char (q chứa địachỉ của1 biếnkiểu char) - q đượccấp phát vùng nhớ là 4B Lê Thúy Ngọc 6 Địachỉ ô nhớ Bắt đầutừ 0 Mỗiô nhớ có 1 địachỉ Các ô nhớ liên tiếp nhau sẽ có địachỉ liên tiếp nhau. <14> <18> <…> <15> <0> <16> <17> <….> Lê Thúy Ngọc 7 Toán tử & &<biếnthường> Cho địachỉ ô nhớ dành cho biến đikèm VD: int m, *p; &m: //cho địachỉ củabiếnm (địachỉ củabyte đầutiêncủabiến m) scanf(“%d”, &m); Å 5 //đặt vào ô nhớ có địachỉ là (&m) giá trị 5 p = &m; //p trỏđếnm (p chứa địachỉ củam) scanf(“%d”, p); Å 5 //đặt5 vàoô nhớ có địachỉ là p Lê Thúy Ngọc 8 Minh hoạ 125 <24><12> p(m) 125 p(m) Lê Thúy Ngọc 9 Ví dụ 1. int n, m, *p, *q, *s; 2. char c; 3. p = n; 4. p = &n; 5. q = p; 6. p = &m; =>q??? 7. q = &p; 8. s = &c; 9. p = 10; p trỏ tớin q trỏ tớiô nhớ mà p đang trỏ tới Lê Thúy Ngọc 10 Toán tử * *<biến con trỏ> cho nội dung ô nhớ mà biến con trỏ trỏ tới VD: int x, *px; px = &x; => *px và x là tương đương trong mọingữ cảnh [...]... ps5, ps[100] con trỏ cấu trúc biến cấu trúc mảng cấu trúc Lê Thúy Ngọc 21 Con trỏ cấu trúc ps1 = &ps4; // gán địa chỉ của ps4 cho ps1 (ps1 trỏ đến ps4) ps2 = &ps[2]; //ps2 chứa địa chỉ của ps[2] (ps2 trỏ đến ps[2]) ps3 = ps; //ps2 chứa địa chỉ ps (ps[0]) (ps2 trỏ đến ô nhớ chứa ps[0]/ ps2 trỏ đến ps Lê Thúy Ngọc 22 Truy cập thông qua con trỏ Có thể truy cập các thành phần thông qua con trỏ theo 1 trong... Lê Thúy Ngọc 17 toán tử Giữa 2 biến con trỏ chỉ tồn tại duy nhất toán tử hiệu của 2 biến con trỏ cho ra khoảng cách giữa 2 ô nhớ mà 2 con trỏ trỏ tới q – p = (-)/sizeof(int)=3 Lê Thúy Ngọc 18 Ví dụ int m,n,*p,*q; p = &m; q = &n; printf(“%d”,p-q); Lê Thúy Ngọc 19 Ví dụ int a[10],*p,*q; p = &a[2]; q = &a[5]; printf(“%d”,q-p); =>Output: 3 Lê Thúy Ngọc 20 Con trỏ cấu trúc struct PHANSO { int tu;... = *p + *q; n = *p + *q; *p = m*n; printf(“%d %d %d %d”,*p,*q,m,n); 13 Ví dụ int n, *p, *q; sử dụng biến con p = q; trỏ không hợp lý q = &n; scanf(“%d”,q); printf(“%d %d %d”, *p ,*q,n); không bao giờ sử dụng biến con trỏ khi nóchưa trỏ đến vùng nhớ hợp lệ Lê Thúy Ngọc 14 phép toán số học trên con trỏ int *p, m; p = &m; p = p + 5; = + 5 *sizeof(int) = 12 + 5*4 = 32 Lê Thúy Ngọc 15 Minh hoạ (m) p... trỏ theo 1 trong 2 cách: Tên _con_ trỏ tên_thành_phần (*Tên _con_ trỏ) tên_thành_phần sau khi thực hiện các phép gán ps1 = &ps4; các cách viết sau là tương đương: ps1 tu và (*ps1).tu và ps4.tu Lê Thúy Ngọc 23 Phép gán thông qua con trỏ *ps1 ps4 *ps2 ps[2]; *ps3 ps[0]; ps4 = ps5; ps[2] = ps4; *ps1 = ps5; *ps2 = *ps1; Lê Thúy Ngọc 24 Phép cộng, trừ địa chỉ ps2 = &ps[2] ; ps2 trỏ tới các phần tử bất kỳ khác...Ví dụ Đặt 5 vào ô nhớ mà px trỏ tới Đến ô nhớ mà px trỏ tới lấy nội dung *px = 5; x = 5; int y = x; int y = *px if (x == z) if (*px == z) Khi biết địa chỉ 1 biến printf(“%d”, *px); printf(“%d”,x); thì có thể làm thay đổi scanf(“%d”,px); scanf(“%d”,&x);... ps[2]; *ps3 ps[0]; ps4 = ps5; ps[2] = ps4; *ps1 = ps5; *ps2 = *ps1; Lê Thúy Ngọc 24 Phép cộng, trừ địa chỉ ps2 = &ps[2] ; ps2 trỏ tới các phần tử bất kỳ khác ps2 = ps2 – 2 ; //ps2 sẽ trỏ tới ps[0] ps2 = ps2 + 5; //ps2 sẽ trỏ tới ps[7] Lê Thúy Ngọc 25 . (Win) Lê Thúy Ngọc 5 Khai báo biến con trỏ <KDL> *<tên biến>; VD: int *p; //p là biến con trỏ, trỏ tớikiểuint char *q; - q là 1 biến con trỏ - q trỏ tới1 biếnkiểu char (q chứa địachỉ. &p; 8. s = &c; 9. p = 10; p trỏ tớin q trỏ tớiô nhớ mà p đang trỏ tới Lê Thúy Ngọc 10 Toán tử * *<biến con trỏ& gt; cho nội dung ô nhớ mà biến con trỏ trỏ tới VD: int x, *px; px =. %d %d”, *p ,*q,n); sử dụng biến con trỏ không hợplý không bao giờ sử dụng biến con trỏ khi nóchưa trỏ ến vùng nhớ hợplệ Lê Thúy Ngọc 15 phép toán số học trên con trỏ int *p, m; p = &m; p =