1. Trang chủ
  2. » Công Nghệ Thông Tin

Chương 12: Pointer pot

18 173 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 18
Dung lượng 1,18 MB

Nội dung

10/26/2009 CBGD: ThS.Trần Anh Dũng 1 CBGD: Th S Chương 12 POINTER S .Trần Anh Dũng 1 POINTER KHÁI NIỆM CBGD: ThS.T r Trong ngôn ngữ C, mỗibiếnvàchuỗikýtựđều đượclưutrữ trong bộ nhớ và có địachỉ riêng, địachỉ này xác định vị trí của chúng trong bộ nhớ Æ C đưarakiểudữ liệu pointer (tạmdịch là con trỏ) để khai b áo cho các biếnlưu địachỉ. Đây là mộtkiểudữ liệu đặcbiệtvàđượcsử dụng nhiềutrong mộtchương trình C. Một biế ó kiể it ó thể l đ dữ liệ t ó là đị 2 r ần Anh Dũng Một biế nc ó kiể u p o i n t e r c ó thể l ư u đ ược dữ liệ u t rong n ó , là đị a chỉ củamột đốitượng đang khảosát. Biến Chuỗi Hàm THAO TÁC TRÊN POINTER CBGD: ThS.T r 3 r ần Anh Dũng Có nghĩa là khi khai báo, biến hệ_số_a thì đượccấp phát một vùng nhớ trong bộ nhớ máy tính. Địachỉđầucủavùngnhớ này chính là địachỉ củabiến hệ_số_a: &hệ_số_a THAO TÁC TRÊN POINTER CBGD: ThS.T r Kếtquả của phép toán lấy địachỉ củamộtbiếnlàmộthằng pointer hằng trỏđếnbiến đó, địachỉ hằng này có thểđược xem như một giá trịđểgán vào biến pointer. ằ ể 4 r ần Anh Dũng H ằ ng p ointe r cũng có th ể là tên mảng hoặctênhà m . 10/26/2009 CBGD: ThS.Trần Anh Dũng 2 THAO TÁC TRÊN POINTER CBGD: ThS.T r 5 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 6 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 7 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 8 r ần Anh Dũng 10/26/2009 CBGD: ThS.Trần Anh Dũng 3 THAO TÁC TRÊN POINTER CBGD: ThS.T r 9 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 10 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 11 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r Có thể cộng, trừ một pointer vớimộtsố nguyên (int, long, ). Kếtquả là một pointer. Pointer có đượctừ phép cộng hoặctrừ trên, sẽ chỉđếnmột đối tượng mớilệch với đốitượng cũ nphầntử,nếu tính theo byte thì đốitượng cũ lệch với đốitượng mớisố byte bằng n lần kích thước byte củakiểu đốitượng mà con trỏđang trỏđế n. 12 r ần Anh Dũng 10/26/2009 CBGD: ThS.Trần Anh Dũng 4 THAO TÁC TRÊN POINTER CBGD: ThS.T r 13 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 14 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 15 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r Phép trừ giữa hai pointer vẫnlàmột phép toán hợplệ,kếtquả là mộttrị thuộckiểu int biểuthị khoảng cách (số phầntử)giữa hai pointer đó 16 r ần Anh Dũng 10/26/2009 CBGD: ThS.Trần Anh Dũng 5 THAO TÁC TRÊN POINTER CBGD: ThS.T r 17 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 18 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r C cho phép khai báo mộtbiến pointer là hằng hoặc đốitượng của một pointer là hằng.Lúcđó, việcgán,hoặctăng giảmtrị lưu trong pointer hằng là không hợplệ,hoặcthayđổi đốitượng của pointer khi pointer được khai báo là chỉđếnmột đốitượng hằng đềubị Cbáolỗi 19 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 20 r ần Anh Dũng 10/26/2009 CBGD: ThS.Trần Anh Dũng 6 THAO TÁC TRÊN POINTER CBGD: ThS.T r 21 r ần Anh Dũng POINTER VÀ MẢNG CBGD: ThS.T r 22 r ần Anh Dũng POINTER VÀ MẢNG CBGD: ThS.T r 23 r ần Anh Dũng POINTER VÀ MẢNG CBGD: ThS.T r 24 r ần Anh Dũng 10/26/2009 CBGD: ThS.Trần Anh Dũng 7 POINTER VÀ MẢNG CBGD: ThS.T r 25 r ần Anh Dũng POINTER VÀ MẢNG CBGD: ThS.T r Khai báo đốisố củahàm,cóthể khai báo đốisố giả dướidạng mảng: int a[] hoặccóthể khai báo dướidạng pointer: int *a 26 r ần Anh Dũng ĐỐI SỐ CỦA HÀM LÀ POINTER – TRUYỀN ĐỐI SỐ THEO SỐ DẠNG THAM SỐ BIẾN CBGD: ThS.T r 27 r ần Anh Dũng ĐỐI SỐ CỦA HÀM LÀ POINTER – TRUYỀN ĐỐI SỐ THEO SỐ DẠNG THAM SỐ BIẾN CBGD: ThS.T r 28 r ần Anh Dũng 10/26/2009 CBGD: ThS.Trần Anh Dũng 8 ĐỐI SỐ CỦA HÀM LÀ POINTER – TRUYỀN ĐỐI SỐ THEO SỐ DẠNG THAM SỐ BIẾN CBGD: ThS.T r Cách cũ Cách mới 29 r ần Anh Dũng Cách cũ Cách mới ĐỐI SỐ CỦA HÀM LÀ POINTER – TRUYỀN ĐỐI SỐ THEO SỐ DẠNG THAM SỐ BIẾN CBGD: ThS.T r 30 r ần Anh Dũng HÀM TRẢ VỀ POINTER VÀ MẢNG CBGD: ThS.T r 31 r ần Anh Dũng HÀM TRẢ VỀ POINTER VÀ MẢNG CBGD: ThS.T r 32 r ần Anh Dũng Hàm lon_nhat() trả về một địachỉ: ¾ Là địachỉ củamộtint ¾ Hoặc địachỉ củamộtmảng các int Việcsử dụng địachỉ theo đốitượng nào là do nơigọi 10/26/2009 CBGD: ThS.Trần Anh Dũng 9 HÀM TRẢ VỀ POINTER VÀ MẢNG CBGD: ThS.T r 33 r ần Anh Dũng Pointer đượctrả qua lệnh return chính là tên hàm, là địachỉđầumảng. Đốisố th ật đưa vào cho hàm là một địachỉ củamộtbiếnintđể nhậntrị này CHUỖI KÝ TỰ CBGD: ThS.T r 34 r ần Anh Dũng CHUỖI KÝ TỰ CBGD: ThS.T r 35 r ần Anh Dũng CHUỖI KÝ TỰ CBGD: ThS.T r 36 r ần Anh Dũng 10/26/2009 CBGD: ThS.Trần Anh Dũng 10 CHUỖI KÝ TỰ CBGD: ThS.T r Khi nhậptrị,hàmnàyđọc các ký tựđếnkhi nào gặpkýtự quy định hàng mới(tứckýtự '\n', tức khi ta ấn p hím ENTER) thì kết thúc việcnhập 37 r ần Anh Dũng Hàm này trả về một pointer trỏ đếnchuỗi, pointer này chính là tên mảng, là đốisố sau khi gán chuỗi CHUỖI KÝ TỰ CBGD: ThS.T r 38 r ần Anh Dũng Lệnh gets hiểu Dang Thanh Tin là 1 chuỗi (không có dấuxuống hàng) Lệnh scanf hiểu Dang Thanh Tin là 3 chuỗi(dodấu khoảng trắng) CHUỖI KÝ TỰ CBGD: ThS.T r Để xuấtchuỗi, hai hàm thường hay được dùng: ¾ puts() ¾ itf() 39 r ần Anh Dũng ¾ p r i n tf() Cả hai hàm có prototype trong file stdio.h. CHUỖI KÝ TỰ CBGD: ThS.T r 40 r ần Anh Dũng - [...]... MẢNG CÁC POINTER POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 51 CBGD: ThS.Trần Anh Dũng 50 52 13 10/26/2009 MẢNG CÁC POINTER MẢNG CÁC POINTER CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 53 MẢNG CÁC POINTER MẢNG CÁC POINTER CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 55 CBGD: ThS.Trần Anh Dũng 54 56 14 10/26/2009 MẢNG CÁC POINTER MẢNG CÁC POINTER. .. ThS.Trần Anh Dũng 54 56 14 10/26/2009 MẢNG CÁC POINTER MẢNG CÁC POINTER CBGD: ThS.Tr Anh Dũng rần rần CBGD: ThS.Tr Anh Dũng 58 57 POINTER CỦA POINTER POINTER CỦA POINTER CBGD: ThS.Trần Anh Dũng CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 59 60 15 10/26/2009 POINTER CỦA POINTER ĐỐI SỐ CỦA HÀM MAIN CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 61 ĐỐI SỐ CỦA HÀM MAIN ĐỐI SỐ CỦA HÀM MAIN CBGD:... vùng đáy bộ nhớ, và được quản lý bởi các biến pointer Nếu hàm này xin được khối bộ nhớ cần thiết thì chúng sẽ trả về một pointer trỏ đến đầu khối này Nếu không xin được khối bộ nhớ cần thiết, hàm sẽ về trị là một con trỏ NULL CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 47 CBGD: ThS.Trần Anh Dũng 46 48 12 10/26/2009 POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG CBGD: ThS.Tr... chuỗi đích mà không báo lỗi nào, tuy nhiên chương trình sẽ chạy sai cho các lệnh dưới hoặc không kết thúc được 42 44 11 10/26/2009 CHUỖI KÝ TỰ CHUỖI KÝ TỰ CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 45 CHUỖI KÝ TỰ POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG C cho phép khai báo các biến động, các biến này khi cần thì xin chỗ, không cần thì giải phóng vùng nhớ cho chương trình sử dụng vào mục đích khác Các... CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 63 CBGD: ThS.Trần Anh Dũng 62 64 16 10/26/2009 ĐỐI SỐ CỦA HÀM MAIN ĐỐI SỐ CỦA HÀM MAIN CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 65 POINTER TRỎ ĐẾN HÀM POINTER TRỎ ĐẾN HÀM CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr Anh Dũng rần 67 CBGD: ThS.Trần Anh Dũng 66 68 17 10/26/2009 ỨNG DỤNG • 69 CBGD: ThS.Trần Anh Dũng CBGD: ThS.Tr Anh Dũng rần CBGD: ThS.Tr . CÁC POINTER CBGD: ThS.T r 56 r ần Anh Dũng 10/26/2009 CBGD: ThS.Trần Anh Dũng 15 MẢNG CÁC POINTER CBGD: ThS.T r 57 r ần Anh Dũng MẢNG CÁC POINTER CBGD: ThS.T r 58 r ần Anh Dũng POINTER CỦA POINTER CBGD:. Dũng 3 THAO TÁC TRÊN POINTER CBGD: ThS.T r 9 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 10 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 11 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r Có. Dũng 4 THAO TÁC TRÊN POINTER CBGD: ThS.T r 13 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 14 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r 15 r ần Anh Dũng THAO TÁC TRÊN POINTER CBGD: ThS.T r Phép

Ngày đăng: 12/08/2014, 02:22