Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
836 KB
Nội dung
Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 1/56 CHƯƠNG 5: KIỂUCONTRỎVÀKIỂUCẤUTRÚC Mục tiêu Giới thiệu các kiến thức về kiểuContrỏvàkiểuCấu trúc: khái niệm, cách định nghĩa, khai báo biến con trỏ, biến cấu trúc, cách truy xuất dữ liệu bằng contrỏvà thao tác với từng thành phần của cấu trúc. Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 2/56 CHƯƠNG 5: KIỂUCONTRỎVÀKIỂUCẤUTRÚC Nội dung Kiểucontrỏ Kiểucấutrúc Cấutrúc tự trỏ Mảng cấutrúc Contrỏvà mảng Mảng contrỏ Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 3/56 - Địa chỉ và phép toán & - Khai báo biến contrỏ - Các phép toán trên contrỏ - Cấp phát và giải phóng bộ nhớ cho contrỏ 5.1 KiểuContrỏ Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 4/56 - Địa chỉ Là một đại lượng dùng để định vị (xác định) vị trí - Đối tượng muốn xác định ở đây là các biến và các phần tử (ô nhớ) chứa dữ liệu - Để xác định được địa chỉ của một đối tượng nào đó trong C++, ta sử dụng phép toán một ngôi lấy địa chỉ là “&” theo cú pháp: &Đốitượng \\ Dùng để xác định vị trí ô nhớ “Đốitượng” Địa chỉ và phép toán & Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 5/56 Trường hợp, đối tượng là một biến, ta viết &Tenbien \\Lấy địa chỉ của biến Yêu cầu: Xác định địa chỉ của đối tượng nếu là mảng, chuỗi ký tự? Địa chỉ và phép toán & Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 6/56 Ví dụ: string st="hello"; float a[]={5.0,4.0,3.0,2.0,1.0}; int i; char b[1]={'a'}; cout<<&st<<endl; for (i=0; i<=4; i++) cout<<&a[i]<<endl; cout<<&a<<endl; cout<<&b<<endl; cout<<b[0]<<endl; Địa chỉ và phép toán & Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 7/56 - Contrỏ là một biến chứa địa chỉ của biến khác. - Giả sử P là contrỏ chứa địa chỉ của biến x thì ta gọi p trỏ tới x hay x được trỏ bởi p. - Thông qua con trỏ, ta có thể làm việc được với nội dung của ô nhớ mà contrỏtrỏ đến. Khai báo biến contrỏ Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 8/56 - Cú pháp: kiểu_dữ_liệu *tên_biến_con_trỏ; Trong đó: - Kiểu_dữ_liệu là kiểu dữ liệu của ô nhớ mà ta muốn contrỏtrỏ tới. - Dấu (*) nhằm báo cho trình biên dịch biết đang làm việc với kiểu dữ liệu là kiểucontrỏ - tên_biến_con_trỏ cũng được đặt theo quy tắc đặt tên => Khai báo contrỏ có tên tên_biến_con_trỏ trỏ tới ô nhớ chứa dữ liệu có kiểu_dữ_liệu Khai báo biến contrỏ Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 9/56 - Sử dụng contrỏ Để contrỏ có tênbiếncontrỏ trỏ đến biến (ô nhớ) có kiểudữliệu ta cần phải gán contrỏ tênbiếncontrỏ cho địa chỉ của biến(ô nhớ) cần trỏ đến: tênbiếncontrỏ = địa chỉ của ô nhớ (biến) cần trỏ tới Lưu ý: Không thể gán một hằng địa chỉ cụ thể cho biếncontrỏ Để lấy nội dung ô nhớ mà contrỏtrỏ tới ta sử dụng phép toán *. Khai báo biến contrỏ Ngôn ngữ Lập trình C++ Chương 5: Kiểucontrỏvàkiểucấutrúc 10/56 Ví dụ: float a[]={5.2, 4.3, 3.1, 2.25, 1.0}; int i=9, *q; float *p, *p1; p=a; p1=&a[3]; cout<<a<<endl; cout<<p<<endl; cout<<p1<<endl; cout<<a[3]<<endl; cout<<*p1<<endl; cout<<*p<<endl; cout<<*p+*p<<endl; q=&i; cout<<q<<endl; Khai báo biến contrỏ [...]... nghĩa một cấutrúc Ngôn ngữ Lập trình C ++ Chương 5: Kiểucontrỏvà kiểu cấutrúc 22/56 Định nghĩa cấutrúc Cú pháp tổng quát để định nghĩa một kiểucấutrúc như sau: struct Tên _kiểu_ cấu_ trúc { /*Bắt đầu một cấu trúc* / ; ; …… ; }; /*Kết thúc một cấutrúc Ngôn ngữ Lập trình C ++ Chương 5: Kiểucontrỏvàkiểucấutrúc 23/56 Định nghĩa cấutrúc Ví dụ:... Lập trình C ++ Chương 5: Kiểucontrỏvàkiểucấutrúc 32/56 Contrỏcấutrúc - Contrỏcấutrúc là contrỏ chứa địa chỉ của một biến cấutrúc hoặc một vùng nhớ có kiểucấutrúc nào đó - Cách khởi tạo một contrỏcấu trúc: + Gán địa chỉ của một biến cấutrúc cho một thành phần của mảng + Contrỏ được khởi tạo bằng việc sử dụng toán tử new để cấp phát bộ nhớ + Đối với contrỏ p trỏ đến mảng a, ta có thể... C ++ Chương 5: Kiểucontrỏvàkiểucấutrúc 19/56 5.2 Kiểucấutrúc - Kiểucấutrúc là gì? - Làm thế nào để định nghĩa một cấu trúc? - Cách khai báo biến cấu trúc? - Làm thế nào để làm việc với các thành phần của cấu trúc? Ngôn ngữ Lập trình C ++ Chương 5: Kiểucontrỏvàkiểucấutrúc 20/56 Khái niệm - Kiểucấutrúc là kiểu dữ liệu bao gồm nhiều thành phần có kiểu khác nhau,... Kiểucontrỏvà kiểu cấutrúc 12/56 Các phép toán trên contrỏ + Phép tăng giảm địa chỉ: p+n: Contrỏtrỏ đến thành phần thứ n sau p p-n: Contrỏtrỏ đến thành phần thứ n trước p Một đơn vị tăng của contrỏ bằng kích thước của biến được trỏ Chẳng hạn, biến có kiểu nguyên thì khi contrỏ tăng hay giảm một đơn vị tương đương với 2 bytes Ngôn ngữ Lập trình C ++ Chương 5: Kiểucontrỏvà kiểu cấutrúc 13/56... thân cấutrúc này lại là thành phần của một cấutrúc khác lớn hơn, ta truy cập theo cú pháp: Tên_biến _cấu_ trúc. tên_biến _cấu_ trúc. tên_thành_phần Tên_biến _cấu_ trúc. tên_biến _cấu_ trúc. tên_biến _cấu_ tr úc.tên_thành_phần - Để làm việc với một biến cấu trúc, ta cần phải thao tác trên từng thành Ngôn ngữ Lập trình C ++ phần của nó Chương 5: Kiểucontrỏvà kiểu cấutrúc 30/56 Truy cập thành phần của cấu trúc. .. 5: Kiểucontrỏvà kiểu cấutrúc 34/56 Địa chỉ của các thành phần cấutrúc - Các thành phần của cấutrúc cũng giống như các biến Do đó, việc lấy địa chỉ của các thành phần này cũng tương tự như với biến Chẳng hạn: &Sinhvien.Hoten; &Lop[10].Gioitinh; &(p->Diem); Ngôn ngữ Lập trình C ++ Chương 5: Kiểucontrỏvàkiểucấutrúc 35/56 5.3 Cấutrúc tự trỏ Cách 1: typedef struct { struct Têncấutrúc tênbiếncấutrúc;... thường kiểucấutrúc được khai báo trong tệp tiêu đề (.h) và được sử dụng trong chương trình bằng lệnh #include Ngôn ngữ Lập trình C ++ Chương 5: Kiểucontrỏvàkiểucấutrúc 29/56 Truy cập thành phần của cấutrúc - Nếu biến cấutrúc là thành phần trực tiếp của một cấu trúc, ta truy cập theo cú pháp: Tên_biến _cấu_ trúc. tên_thành_phần - Nếu biến cấutrúc là thành phần trực tiếp của một cấutrúc mà... Thang; unsigned int Nam; }Ngay_den, Ngay_di; Chương 5: Kiểucontrỏvàkiểucấutrúc 25/56 Khai báo biến cấutrúc Lưu ý: - Có thể vừa khai báo vừa khởi tạo giá trị cho biến kiểucấutrúc - Không được phép gán trực tiếp một bộ giá trị cụ thể cho một biến cấutrúc Ngôn ngữ Lập trình C ++ Chương 5: Kiểucontrỏvàkiểucấutrúc 26/56 Khai báo biến cấutrúc Ví dụ: struct Ngaythang { unsigned int Ngay, Thang,... dụng cho các contrỏtrỏ đến các phần tử của cùng một mảng dữ liệu Ngôn ngữ Lập trình C ++ Chương 5: Kiểucontrỏvàkiểucấutrúc 15/56 Cấp phát và giải phóng bộ nhớ cho contrỏ - Cấp phát bộ nhớ: sử dụng toán tử new + Cấp phát tĩnh + Cấp phát động Cú pháp: p = new kieugiatri; p = new kieugiatri[so_phan_tu] Ngôn ngữ Lập trình C ++ Chương 5: Kiểucontrỏvàkiểucấutrúc 16/56 Cấp phát và giải phóng... Chương 5: Kiểucontrỏvàkiểucấutrúc 21/56 Định nghĩa cấutrúc - Xác định các kiểu dữ liệu đơn giản của các biến thành phần được nhóm lại trong cấutrúc đó - Cần chỉ ra: tên của cấutrúcvà các thành phần của nó Phân biệt thành phần này với thành phần khác thông qua kiểu dữ liệu, tên biến và kết thúc bằng dấu chấm phẩy (;) Các thành phần của cấutrúc được đặt trong cặp dấu móc nhọn ({}) và dùng dấu . KIỂU CON TRỎ VÀ KIỂU CẤU TRÚC Nội dung Kiểu con trỏ Kiểu cấu trúc Cấu trúc tự trỏ Mảng cấu trúc Con trỏ và mảng Mảng con trỏ Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu. Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 1/56 CHƯƠNG 5: KIỂU CON TRỎ VÀ KIỂU CẤU TRÚC Mục tiêu Giới thiệu các kiến thức về kiểu Con trỏ và kiểu Cấu trúc: khái niệm,. trỏ Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 9/56 - Sử dụng con trỏ Để con trỏ có tênbiếncontrỏ trỏ đến biến (ô nhớ) có kiểudữliệu ta cần phải gán con trỏ tênbiếncontrỏ