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

Bài giảng Tin học cơ sở 4: Con trỏ - TS. Vũ Thị Hồng Nhạn

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:30

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

Bài giảng Tin học cơ sở 4: Con trỏ, cung cấp cho người học những kiến thức như ý nghĩa, cách khai báo con trỏ; Sử dụng con trỏ trong mảng, chuỗi; truyền mảng và chuỗi giữa các hàm qua con trỏ; truyền mảng và chuỗi giữa các hàm qua con trỏ; xử lý mảng qua con trỏ. Mời các bạn cùng tham khảo!

Chủ đề:
Lưu

Nội dung Text: Bài giảng Tin học cơ sở 4: Con trỏ - TS. Vũ Thị Hồng Nhạn

  1. Tin Học Cơ Sở 4: Con trỏ Vũ Thị Hồng Nhạn (vthnhan@vnu.edu.vn) Human Machine Interaction Lab. Vietnam National Univ., Hanoi
  2. Nội dung Ý nghĩa, cách khai báo con tr S d ng con tr trong m ng, chu i Truy n m ng và chu i gi a các hàm qua con tr X lý m ng qua con tr 10/03/2016 Pointers, Arrays & Strings Page 2
  3. Con trỏ Con tr là m t bi n ch a đ a ch c a bi n Trong m t s tính toán dùng con tr là cách duy nh t đ gi i quy t v nđ S d ng con tr có ưu đi m thư ng giúp cho chương trình ng n g n và hi u qu Tuy nhiên cũng r t nguy hi m n u như l p trình viên không c n th n 10/03/2016 Pointers, Arrays & Strings Page 3
  4. Bộ nhớ Các bi n đư c lưu trong b nh B nh có th đư c xem như m t m ng r t l n (array) M i v trí trong b nh có m t đ a ch M t đ a ch là m t s nguyên, gi ng như ch m c trong m ng Trong C, m t đ a ch b nh đư c g i là m t “con tr ” C cho phép truy c p v trí b nh m t cách tr c ti p 10/03/2016 Pointers, Arrays & Strings Page 4
  5. Hai toán tử Toán t & Tr l i đ a ch c a m t đ i s Nói cách khác, tr l i con tr t i đ i s Đ i s (argument) ph i là m t “tên bi n” Toán t * Tr l i giá tr lưu đ a ch b nh c th Đ i s (argument) ph i là m t con tr 10/03/2016 Pointers, Arrays & Strings Page 5
  6. Khai báo Khai báo Ý nghĩa int i Một biến nguyên int *p Cấp phát 2 bytes để lưu giữ địa chỉ của biến nguyên, và vùng nhớ có tên là p int **m Con trỏ “trỏ tới” con trỏ nguyên Address 1203 p = &i Con trỏ p chỉ tới địa chỉ chứa i i=10 printf(“%p”, p) In ra địa chỉ của i (nằm trong p) p=1203 m = &p m trỏ tới p *p=10 printf(“%p”, m) In ra địa chỉ của p (trong m) 10/03/2016 Pointers, Arrays & Strings Page 6
  7. Ví dụ 1 Khai báo *px là nội dung của px int main(){ nên khi thực *px +=10 int x=6, y=7; giá trị của ix là 16 int *px, *py; printf("x=%d, y=%d\n", x, y); Gán px= &x; px=&ix py= &y; py=&iy *px +=10; *py +=10; printf("x=%d, y=%d\n", x, y); } 10/03/2016 Pointers, Arrays & Strings Page 7
  8. Ví dụ 2 Truyền ñịa chỉ sang hàm void init(int, int); //khai báo hàm int main(){ Khi nội dung c a bi n con tr *px, *py int x, y; thay đ i init(&x, &y); thì x, y c a chương trình thay đ i theo printf("x=%d, y=%d", x, y); getch(); return 0; } Truy n 2 tham s là void init(int *px, int *py){ //Định nghĩa hàm “địa chỉ của biến x, y” *px=6; // gán 6 cho nội dụng của px *py=7; } 10/03/2016 Pointers, Arrays & Strings Page 8
  9. Ví dụ 3 Truyền ñịa chỉ sang hàm Hoán v giá tr c a 2 bi n void swap(int *px, int *px){ int main(){ int temp = *px; int a=6, b=7; *px=*py; printf("Truoc: a=%d, b=%d\n", a, b); *py=temp; } swap(&a, &b); printf("Sau: a=%d, b=%d\n", a, b); getch(); return 0; } 10/03/2016 Pointers, Arrays & Strings Page 9
  10. Ví dụ 3 Truyền ñịa chỉ sang hàm 10/03/2016 Pointers, Arrays & Strings Page 10
  11. Con trỏ và mảng Con tr và m ng có liên quan g n gũi v i nhau M t bi n m ng th c t là m t con tr tr t i ph n t đ u tiên trong m ng Có th truy c p ph n t m ng s d ng ký hi u m ng ho c con tr a[0] tương đương v i *a a[1] tương đương v i *(a + 1) a[2] tương đương v i *(a + 2) 10/03/2016 Pointers, Arrays & Strings Page 11
  12. Ví dụ 4 Con trỏ trỏ ñến mảng trong hàm C ng thêm giá tr vào m t m ng int main(){ #define SIZE 4 int array[]={2,5,6,9}; int x=10, i; //định nghĩa hàm void add(int *ptr, int inum, int a){ add(array, SIZE, x); int i; for(i=0; i
  13. Ví dụ 4 Con trỏ trỏ ñến mảng trong hàm Gi s 245 là đ a ch array khi truy n vào hàm add() qua ptr, ptr=245 *ptr= *ptr +10 15 16 19 10/03/2016 Pointers, Arrays & Strings Page 13
  14. Ví dụ 5 Con trỏ và chuỗi Bi u di n chu i dùng “m ng” vs. “con tr ” #include #include • Biến con trỏ, thay vì sử dụng greeting[]=“Chao ban ” int main(){ • Cả 2 cách đều dành số byte cho chuỗi kèm theo ký tự char *greeting = "Chao ban "; null (\0) char name[28]; printf("Ten ban la gi? "); gets(name); printf("%s", greeting); puts(name); Ten ban la gi? Red Wine getch(); Chao ban Red Wine return 0; } - 10/03/2016 Pointers, Arrays & Strings Page 14
  15. Ví dụ 5 Con trỏ và chuỗi Đ i v i m ng Con tr Đ a ch c a ký t đ u ti n c a Có thêm bi n con tr “tr ” đ n m ng s là “tên m ng” tên greeting 10/03/2016 Pointers, Arrays & Strings Page 15
  16. Ví dụ 6 Khởi tạo mảng con trỏ Bi u di n chu i dùng “m ng” vs. “con tr ” #include #include int main(){ char *thang[12] ={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; int month; printf("Nhap vao thang 1-12: "); scanf("%d", &month); printf("%s\n", thang[month-1]); getch(); return 0; } 10/03/2016 Pointers, Arrays & Strings Page 16
  17. Kh i t o m ng các con tr “tr đ n” các chu i chi m ít b nh hơn kh i t o m ng chu i!
  18. Ví dụ 7 Xử lý con trỏ “trỏ ñến” chuỗi char *temp; char name[10]=“Xin chao"; temp =name; puts( temp); // “Xin chào” Nh p danh sach tên ngư i, s p x p và in theo th t tăng d n Nh p vào 1 danh sách (m ng 2 chi u) M t m ng con tr “tr t i” danh sách đó Dùng con tr đ s p x p và In danh sách 10/03/2016 Pointers, Arrays & Strings Page 18
  19. Ví dụ 7 Xử lý con trỏ “trỏ ñến” chuỗi #include //sắp xếp #define MAXNUM 5 for(i=0; i
  20. Ví dụ 7 Xử lý con trỏ “trỏ ñến” chuỗi M ng con tr *ptr[MAXNUM] M ng các chu i Tr đ n chu i name[MAXNUM][MAXLEN] 10/03/2016 Pointers, Arrays & Strings Page 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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