Chương 2 : Kiểu dữ liệu
Giảng viên: Ph.D Nguyễn Văn Hòa Khoa KT-CN-MT – ðH An Giang
1
Bits và giá trị (values)
10010101010011101101001110101011
Signed Integer
10010101010011101101001110101011
Unsigned Integer
10010101010011101101001110101011
Address
10010101010011101101001110101011
String
10010101010011101101001110101011
Single Float
10010101010011101101001110101011
2
Nội dung chính của chương
3
(cid:1) Giới thiệu kiểu dữ liệu (cid:1) Kiểu dữ liệu cơ bản (cid:1) Kiểu do người dùng ñịnh nghĩa (cid:1) Kiểu dữ liệu có cấu trúc
Dữ liệu (data)
(cid:2) ðược lưu trữ ở bộ nhớ (cid:2) ðược tổ chức thành dạng bits, bytes, words
(cid:1) Dữ liệu / máy tính
(cid:2) ðược tổ chức phức tạp: số, chuỗi ký tự, các mảng,
ngăn xếp, …
(cid:2) Thuật ngữ ñối tượng dữ liệu (data objects) là một tập
hợp (set) của một hoặc nhiều mẫu dữ liệu
(cid:2) VD Int = {- 231 … 0 … 231 }
4
(cid:1) Dữ liệu / NNLT
ðối tượng dữ liệu
5
(cid:1) Một ñối tượng dữ liệu là một chỗ chứa các giá trị của dữ liệu – một vị trí trong bộ nhớ máy tính, ñược ñặt tên và có thể lưu trữ giá trị của dữ liệu (cid:1) Có 1 tập các thuộc tính xác ñịnh số lượng và kiểu của các giá trị mà ñối tượng dữ liệu có thể lấy, tổ chức luận lý của các giá trị này
Phân loại ñối tượng dữ liệu
(cid:2) ðTDL sơ cấp: chứa một giá trị dữ liệu ñơn (cid:2) ðTDL có cấu trúc: tập hợp của các dữ liệu khác (cid:2) VD!
(cid:1) Phân loại dựa trên cấu trúc: 2 loại
(cid:2) ðTDL tường minh: do người dùng khai báo như biến,
hằng…)
(cid:2) ðTDL ẩn: ñược ñịnh nghĩa bởi hệ thống như các ngăn
xếp lưu trữ các giá trị trung gian, các ô nhớ ñệm
6
(cid:1) Phân loại trên nguồn gốc: 2 loại
Thuộc tính của ðTDL
trưng của ðTDL ñó
(cid:1) Thuộc tính của một ðTDL là một tính chất ñặc
biệt ðTDL này với ðTDL khác.
(cid:1) Mỗi ÐTDL có một tập hợp các thuộc tính ñể phân
kiểu dữ liệu (cid:2) VD Int: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
(cid:1) Các ðTDL sơ cấp có một thuộc tính duy nhất là
7
(cid:1) Các ðTDL có cấu trúc có thêm các thuộc tính nhằm xác ñịnh số lượng, kiểu dữ liệu của các phần tử. VD Struct, Union
Giá trị dữ liệu (GTDL)
(cid:1) GTDL của một ðTDL sơ cấp có thể là một số, một ký tự hoặc là một giá trị logic tùy thuộc vào kiểu của ðTDL ñó.
ñược biểu diễn bởi một khối ô nhớ. (cid:2) VD một ðTDL A chứa GTDL B ~ khối ô nhớ biểu
diễn A chứa dãy bits biểu diễn B
(cid:1) GTDL ñược biểu diễn bởi 1 dãy các bits, ðTDL
các GTDL của các phần tử của ðTDL ñó.
8
(cid:1) GTDL của một ðTDL có cấu trúc là một tập hợp
Thời gian tồn tại của ðTDL
(cid:1) Thời gian tồn tại (lifetime) của một ÐTDL là khoảng thời gian ðTDL chiếm giữ bộ nhớ của máy tính
cho ñến khi nó bị hủy bỏ
9
(cid:1) Thời gian này ñược tính từ khi ÐTDL ñược tạo ra
Biến và hằng
(cid:2) ÐTDL ñược ñịnh nghĩa và ñặt tên một cách tường
minh
(cid:2) Biến là cách trù tượng hóa một hoặc nhiều ô nhớ (cid:2) Thuộc tính : name, address, value, type, lifetime, scope
(cid:1) Biến
(cid:2) ÐTDL có tên và giá trị của hằng không thay ñổi trong
thời gian tồn tại của nó
(cid:2) VD!
10
(cid:1) Hằng
Phạm vi của biến (Scope)
(cid:1) Phạm vi của biến là vùng mà biến có thể trông thấy ñược (cid:1) Phạm vi tĩnh (static scope or block) : C, C++, Java & C#
void sub(){ int count; … while (…) { int count; count++;
}
}
11
int main(){
int count;
count = 10; printf("count %d\n",count);
{
int count; count = 2; count++; printf("count %d\n",count);
} count = count -5; printf("count %d\n",count);
}
12
Phạm vi của biến (tt)
(cid:1) Phạm vi ñộng (dynamic scope): Perl, COMMON, LISP cho phép khai
báo phạm vi ñộng Procedure Big is X : integer; Procedure Sub1 is
Begin … X … End;
13
Procedure Sub2 is X: integer; Begin … End Begin … End
Phạm vi của biến: ví dụ
x : integer; procedure setX(n : integer)
x := n;
procedure printX()
write integer(x);
procedure first()
setX(4); printX();
procedure second()
x : integer; setX(2); printX();
// bắt ñầu chương trình chính setX(1); second(); printX(); first(); printX();
14
int x = 2 procedure f(){ x = x * x;} procedure g(){ h(f) } procedure h(P){
int x = 4 P()
} // bắt ñầu chương trình chính g() print(x)
15
Scope VS Lifetime của biến
(cid:2) Java: 1 biến ñược khai báo trong 1 hàm (no method calls), scope ñược bắt ñầu từ vị trí khai báo ñến cuối hàm và lifetime là thời gian thực hiện của hàm (cid:1) Nhưng scope và lifetime hoàn toàn không tương
tự nhau (cid:2) Scope là khái niện liên quan ñến không gian (cid:2) Lifetime là khái niện liên quan ñến thời gian
16
(cid:1) ðôi khi scope và lifetime là tương tự nhau
Các liên kết (binding)
trong thời gian tồn tại của nó
(cid:1) Một ÐTDL có thể tham gia vào nhiều mối liên kết
và trả CT con
(cid:2) ðTDL với ðTDL (component): giá trị của pointer và
pointer có thể bị thay ñổi do thay ñổi pointer
(cid:2) ðTDL và ô nhớ: trình quản lý bộ nhớ (routine) thiết lập
17
(cid:1) Các mối liên kết phổ biến (cid:2) ðTDL với GTDL: phép gán (cid:2) ðTDL với 1 hoặc nhiều tên tham chiếu: khai báo, gọi
ðặt tên (names)
(cid:2) Có phân biệt ký tự HOA và thường không? (cid:2) Từ khóa gồm những từ nao?
(cid:1) Cách ñặt tên : biến, hằng và hàm
(cid:2) Fortran cho phép tối ña 31 (cid:2) C99 chấp nhận 63 ký tự ñầu tiên (cid:2) Java không giới hạn ñộ dài
(cid:1) Chiều dài tối ña của tên
cái, các số và «_» ñể ñặt tên
18
(cid:1) Hầu hết các NNLT ñều cho phép dùng các chữ
ðặt tên (names) (tt)
giữa 2 từ. VD myStack
(cid:1) Vài NNLT dùng khái niện «camel» : ký tự HOA
(case sensitive). VD rose, ROSE và Rose
(cid:1) C, C++, Java phân biệt giữa chữ hoa chữ thường
tình huống ñặc biệt
(cid:1) Từ khóa trong từng NNLT ñược dùng trong các
tên biến, tên hằng, tên hàm, etc
19
(cid:1) Không ñược dùng từ khóa ñể ñặt tên, chẳng hạn
ðặc tả kiểu dữ liệu
(cid:2) Các thuộc tính: xác ñịnh các ñối tượng dữ liệu thuộc
kiểu
(cid:2) Các giá trị: mà các ñối tượng dữ liệu thuộc kiểu có thể
ñược gán cho
(cid:2) Các tác vụ: các thao tác có thể có trên các ñối tượng dữ
liệu thuộc kiểu
20
(cid:1) ðặc tả kiểu dữ liệu bao gồm ba yếu tố sau:
Kiểu dữ liệu
các phép toán thao tác trên các ÐTDL ñó. (cid:2) VD -int là valid và -string là invalid
(cid:1) Kiểu dữ liệu là một tập hợp các ÐTDL và tập hợp
(cid:2) Số : Int, Real (float point), decimal (cid:2) Char (character) (cid:2) Boolean (Pascal)
21
(cid:1) Các kiểu dữ liệu nguyên thuỷ (primitive types)
Kiểu dữ liệu (tt)
(cid:2) Records (Struct) (cid:2) Variant Records (Unions) (cid:2) Arrays (cid:2) Strings (cid:2) Pointers (cid:2) Lists (Perl) (cid:2) Files (cid:2) Kiểu do người dùng ñinh nghĩa, VD boolean trong C
22
(cid:1) Kiểu dữ liệu có cấu trúc (or composite types)
Khai báo kiểu
dùng ñể chuyển tới bộ dịch, thông tin về số lượng, kiểu của ÐTDL và tên ñối tượng dữ liệu; cần thiết trong quá trình thực hiện chương trình
(cid:1) Khai báo là một phát biểu trong chương trình
ÐTDL
(cid:1) Sự khai báo có thể chỉ rõ thời gian tồn tại của
sử dụng (cid:2) Ưu ñiểm : mềm dẽo, khuyết ñiểm : khó quản lý
23
(cid:1) Một số NNLT không cần khai báo biến trước khi
Ưu ñiểm của kiểu dữ liệu
(cid:1) Cung cấp ngữ cảnh hoàn hảo (implicit context) cho các tác vụ, do ñó programmer không cần chỉ ra ngữ cảnh cụ thể cho các tác vụ
thông thường của programmer (cid:2) Kiểm tra kiểu không thể ngăn ngừa hết các tác vụ vô
nghĩa
24
(cid:1) Cho phép trình biên dịch phát hiện toàn bộ các lỗi
Kiểm tra kiểu
(cid:1) Kiểm tra kiểu là kiểm tra xem mỗi tác vụ ñược thực hiện có nhận ñược ñối số thích hợp thuộc kiểu dữ liệu thích hợp không.
cùng kiểu hay không?
(cid:1) Cùng kiểu (Type Equivalence): khi hai giá trị có
(cid:1) Sự tương thích kiểu (Type Compatibility): khi giá trị của kiểu A ñược dùng trong phạm của kiểu B hay không?
kiểu gì, hoặc phép toán trả kiểu gì?
25
(cid:1) Sự quy nạp kiểu (Type Inference): kiểu thức có
Kiểm tra kiểu (tt)
(cid:2) Kiểu của các biến : int, double, hoặc boolean (cid:2) Biểu thức toán :
(cid:1) Tham biến (arguments) : int hoặc double (cid:1) Kết quả : integer nếu các ñối số là integer và double, ngoặc
ngược lại (cid:2) Biểu thức quan hệ
(cid:1) Tham biến (arguments) : integer hoặc double (cid:1) Kết quả : lý luận (boolean)
(cid:2) Phép gán : biến và biểu thức ñước gán phải có cùng
kiểu
(cid:2) If và While, etc : kiểu của ñiều kiện phải là boolean
26
(cid:1) Các luật kiểm tra kiểu
Kiểm tra kiểu: ñộng và tĩnh
(cid:1) Kiểm tra kiểu ñộng : kiểm tra kiểu ñược thực hiện
trong khi thực hiện chương trình (cid:2) Sử dụng ñuôi kiểu (type tag) ñược lưu trong từng
ðTDL
(cid:2) VD: ðTDL kiểu số nguyên sẽ chứa cả giá trị số nguyên
và ñuôi kiểu ‘integer’
(cid:2) Các ngôn ngữ SNOLBOL4, LISP và APL ñòi hỏi kiểm
tra kiểu ñộng
(cid:2) Ưu ñiểm: linh hoạt (không cần khai báo kiểu, kiểu của các biến có thể thay ñổi trong khi chạy nếu cần thiết) (cid:2) Khuyết ñiểm: có thể sót lỗi về kiểu, khó debug, tốn
nhiều bộ nhớ, tốc ñộ chương trình chậm lại
27
Kiểm tra kiểu: tĩnh
(cid:1) Kiểm tra kiểu tĩnh: chương trình dịch sẽ kiểm
tra kiểu lúc dịch (cid:2) ðòi hỏi các thông tin:
(cid:1) ðối với mỗi tác vụ: số lượng, thứ tự và kiểu dữ liệu của
các ñối số và kết quả
(cid:1) ðối với mỗi tên biến: kiểu của ðTDL có tên biến ñó (cid:1) ðối với mỗi hằng: kiểu của ðTDL có tên hằng ñó (cid:2) Ưu ñiểm: kiểm tra tất cả các tác vụ, không cần ñuôi
kiểu, chương trình chạy nhanh hơn
(cid:2) Khuyết ñiểm: không mền dẻo
28
Kiểm tra kiểu: mạnh và yếu
(cid:1) Kiểm tra kiểu mạnh: NNLT không cho phép các tác vụ mà dữ liệu không tương thích nhau
(cid:1) Kiểm tra kiểu yếu : Cho phép thực hiện chuyển
kiểu dữ liệu một cách tự ñộng (cid:2) VD
(cid:1) NN C Int A; double B; B = 10.1; A = B; valid (cid:1) NN C++ Int A; double B; B = 10.1; A = B; Warning
29
Thông tin về kiểm tra kiểu vài NN
Kiểm tra tĩnh
C++/C#/Java
C
Perl
Python
Pascal/Modula/Ada
Common Lisp
√ √ x x √ x
Kiểm tra mạnh √ x x √ √ √
30
Chuyển kiểu (convertion)
chuyển ñổi kiểu
(cid:1) Nếu không có sự thương thích kiểu lúc kiểm tra kiểu, NNLT thực hiện một trong hai tác vụ sau (cid:2) Sự không tương thích kiểu sẽ bị báo lỗi hoặc (cid:2) Một sự chuyển ñổi kiểu tự ñộng ñược thi hành ñể
Round
(cid:2) Sự chuyển kiểu ngầm (thực hiện ngầm). VD int = int +
double;
31
(cid:1) Hầu hết NNLT ñều cung cấp 2 cách chuyển kiểu (cid:2) Tập hợp các hàm ñể chuyển kiểu. VD, Pascal có hàm
Chuyển kiểu (tt)
nhau : (cid:2) Int to float và ngược lại (cid:2) Enum to Int và ngược lại (cid:2) subclass to base class
(cid:1) Chuyển kiểu chỉ thực hiện ñược giữa các kiểu gần
thước lưu trữ (cid:2) Pointer to integer (cid:2) Integer or enum to pointer (cid:2) Giữa 2 pointer trỏ tới 2 ñối tượng khác kiểu (cid:2) Giữa 2 pointer trỏ tới 2 hàm khác kiểu
32
(cid:1) Nonconverting Cast: giữa 2 kiểu có cùng kích
Sự tương hợp kiểu
(cid:1) Hai kiểu T1 và T2 tương hợp nếu ðTDL kiểu T1 có thể xuất hiện ở vị trí của ðTDL kiểu T2 và ngược lại: (cid:2) Có thể gán ðTDL T1 cho ðTDL T2 và ngược lại
(cid:2) Tương ñương tên (cid:2) Tương ñơn cấu trúc
(cid:1) Type T1=array[1..20] of integer T2=array[1..20] of integer
33
(cid:1) Hai qui tắc xác ñịnh tương hợp
34
35
Kiểu dữ liệu cơ bản
(cid:2) Số nguyên (integer, int) (cid:2) Số thực dấu chấm ñộng (floating-point real)
(cid:1) Kiểu số
36
(cid:1) Kiểu logic (Boolean) (cid:1) Kiểu ký tự (char or character)
Kiểu số nguyên
(cid:1) Số nguyên dài/ngắn, VD Java : byte, short, int, long; với
C : short, int, long
(cid:1) Số nguyên có dấu (signed) hoặc không dấu; bit bên trái
miêu tả dấu 0: positive; 1 negative
10010101010011101101001110101011
(cid:1) Các phép toán
(cid:2) BinOp(Binary operations) : +, -, x, /, mod (cid:2) UnaryOp : âm (-), dương (+) (cid:2) RelOp (relational Operations) : equal, not equal, less-than,
greater-than, less-than-or-equal
(cid:2) BitOp (Bit Operations) : and (&), or (|), shif bits (<<)
37
Số thực dấu chấm ñộng
(cid:1) Dãy số có thứ tự từ một số âm nhỏ nhất tới một số lớn nhất ñược xác ñịnh trước, nhưng dấu phẩy thập phân không cố ñịnh (cid:2) VD 1.234567, 123456.7, 0.00001234567
ô nhớ : phần ñịnh trị (mantissa) và phần mũ (exponent) (cid:2) Single : 1 bit dấu, 23 bits phần trị, 8 bits mũ (cid:2) double : 1 bit dấu, 53 bits phần trị, 10 bits mũ
Single Float
10010101010011101101001110101011
38
(cid:1) Hai thành phần biểu diễn giá trị của số thực trong
Số thực dấu chấm cố ñịnh
chiều dài cố ñịnh
(cid:1) ðược biểu diễn bằng một chuỗi các chữ số có
và phần lẻ
(cid:1) Có dấu chấm thập phân phân cách phần nguyên
phần nguyên và phần lẻ
1 00101010 100111…..010011
Phần nguyên
Phần lẻ
39
(cid:1) VD khai báo trong COBOL: X picture 999 v 99 (cid:1) ðược lưu trữ ở dạng nhị phân biểu diễn trị số của
Kiểu lý luận (logic)
(FALSE)
(cid:1) Kiểu logic chỉ nhận 2 giá trị : ñúng (TRUE) và sai
(cid:1) Trong Pascal, boolean ñược xem là kiểu liệt kê,
Boolean = (FALSE, TRUE) và FALSE giá trị 0 = FALSE, 1 = TRUE 40 (cid:1) Các phép toán logic : AND, OR, NOT
(cid:1) Kiểu logic chỉ dùng duy nhất 1 bit ñể biểu diễn (cid:2) Các phép toán quan hệ (relational operations)
(cid:2) Phép gán 41 (cid:1) Kiểu ký tự ñược lưu trong máy tính ở dạng mã số
(cid:1) Mã số này ñược lưu trữ trong 8-bits (ASCII)
(cid:1) Bảng mã Unicode (16 bit) ñược ñưa vào Java, C#
(cid:1) Các phép toán 42 (cid:1) Kiểu liệt kê (Set)
(cid:1) Kiểu miền con số nguyên (subrange) (cid:1) NNLT Pascal và Ada cho phép người dùng ñặt ra
kiểu dữ liệu bằng cách liệt kê các giá trị của kiểu
ñó
(cid:2) VD type NGAY = (CN, Hai, Ba, Tu, Nam, Sau, Bay); bằng các số nguyên : 0,1,2,…
(cid:2) VD kiểu NGAY cần sử dụng 7 giá trị từ 0 ñến 6 :
(cid:1) Lợi ích của kiểu liệt kê: tăng khả năng dễ ñọc và tính dễ viết và ñộ tin cậy của ngôn ngữ. 43 (cid:1) Giá trị của ðTDL kiểu liệt kê ñược biểu diễn (cid:1) Kiểu dữ liệu mà tập các giá trị là một dãy các giá
trị nguyên trong một khoảng giới hạn ñã ñịnh.
(cid:2) VD A : 1..10 (Pascal); A : Integer Rang 1..10 (Ada) (cid:2) Tiết kiệm ô nhớ về mặt lưu trữ. VD miền con 1..10 chỉ yêu cầu 4 bits các giá trị trong miền con (cid:2) Dể kiểm tra kiểu hơn số nguyên. VD Month: 1..12, thi lệnh gán Month=0 là không hợp lệ 44 (cid:1) Lợi ích của kiểu miền con 45 (cid:1) Mãng
(cid:1) Mẫu tin
(cid:1) String
(cid:1) Pointer
(cid:1) Tập tin (cid:1) Mãng một chiều: ðTDL bao gồm một số cố ñịnh
các phần tử có kiểu giống nhau ñược tổ chức
thành một dãy tuần tự. (cid:2) Số lượng các phần tử
(cid:2) Kiểu dữ liệu của mỗi một phần tử
(cid:2) Chỉ số của mỗi phần tử, VD trong Pascal var myArray: array[-10..10] of integer; chỉ số -10..10
trong C: int myArray[20]; chỉ số 0..19 46 (cid:1) Các thuộc tính của mãng 1 chiều (cid:2) Lựa chọn 1 phần tử [], VD myArray[4]
(cid:2) Các phép toán khác : gán 2 mãng, các phép toán số học trên từng cập 2 mãng có cùng kích thước (cid:1) Các phép toán Int list [] = {4,5,7,83}; char name[] = «NoName»;
(cid:1) Hầu hết các NNLT cấp phát các phần tử của mãng liên tục trong bô nhớ 47 (cid:1) Sự khởi tạo mãng, trong C myArray Kiểu dữ liệu Cận dưới của tập chỉ số LB Bộ mô tả Cận trên của tập chỉ số Kiểu dữ liệu của các phần tử UB
Kiểu phần tử
E Kích thước của mỗi phần tử myArray[LB] Bộ nhớ cho
các phần tử LB : Low subscript bound myArray[UB] UB: Upper subscript bound 48 chiều là mãng của mãng 2 chiều.
(cid:1) Mãng n chiều có n tập các phần tử (cid:2) Pascal myArray array[a..b,c..d] of real;
(cid:2) C float myArray[b-a][d-c]; (cid:1) Mãng 2 chiều là mãng của mãng 1 chiều; mãng 3 (cid:2) Lưu trữ theo trật tự dòng (C, C++, C#)
(cid:2) Lưu trữ theo trật tự cột (Fortran)
(cid:2) Lưu trữ theo pointer của dòng (Java) 49 (cid:1) Sự biểu diễn bộ nhớ 50 có kiểu khác nhau (cid:1) ðTDL cho phép chứa 1 số nhất ñịnh các phần tử (cid:2) Algol 68, C, C++, and Common Lisp: struct
(cid:2) Java, C++, C#: class
(cid:2) Pascal: record
(cid:1) Các thuộc tính (cid:2) Số phần tử, kiểu của các phần tử
(cid:2) Tên phần tử 51 (cid:1) Có nhiều thuật ngữ khác nhau (cid:1) VD 52 type PayType = (Salaried, hourly)
Var Employee: record Salaried : (MonthRate : real; StartDate : integer); Hourly: (HourRate : real; Reg : integer;
Overtime : integer; 53 ID Dept Age PayClass HourRate MonthlyRate StartDate Reg Overtime PayClass = Salaried PayClass = Hourly 54 thêm các tác vụ khác mà các mãng khác không có
(cid:1) C, Pascal, Ada yêu cầu chiều dài của chuỗi giá trị
không vượt quá một giới hạn ñã ñược khai báo
(cid:1) Lisp, Java, C# cho phép thay ñổi chiều dài của biến có kiểu chuỗi ký tự (cid:1) Chuỗi ký tự là mãng của các ký tự, nhưng có kiểu chuỗi 55 (cid:1) SNOBOL4 không giới hạn chiều dài của biến (cid:2) Phép nối kết, Pascal sử dụng toán tử «+»
(cid:2) Các phép toán quan hệ thông thường : bằng, lớn hơn, nhỏ hơn (cid:2) Chọn chuỗi con bằng chỉ số vị trí, VD Fortran str(6:10)
(cid:2) Chọn chuỗi con bằng so mẫu (substr của C)
(cid:2) ðịnh dạng xuất / nhập 56 (cid:1) Các phép toán nhớ cho CT sử dụng (cid:1) Cấp phát bộ nhớ (cấp phát) là dành riêng các ô ñược thực hiện trong qua trình dịch
(cid:2) Ưu ñiểm : dể sử dụng
(cid:2) Nhược ñiểm : không tối ưu (cid:1) Cấp phát tĩnh là sự cấp phát ô nhớ cho ðTDL (cid:2) Ưu ñiểm : sử dụng bộ nhớ 1 cách tối ưu
(cid:2) Nhược ñiểm : người dùng phải tự quản lý 57 (cid:1) Cấp phát ñộng là cấp phát lúc thực hiện CT cấp phát ñộng (cid:1) Con trỏ là ðTDL chứa ñịa chỉ khối ô nhớ ñược trỏ (cid:1) Ô nhớ cấp phát ñộng ñược tham chiếu bằng con (cid:2) Con trỏ chỉ có thể tham chiếu ñến các ðTDL cùng kiểu (Pascal, Ada) (cid:2) Con trỏ có thể tham chiếu tới các ÐTDL có kiểu nhau khác 58 (cid:1) ðặt tả thuộc tính (cid:2) Cấp phát ô nhớ ñộng C++: int *x = new int;
C: int *x = (int *) malloc(sizeof(int));
Java: BankAccount b = new BankAccount(0); (cid:2) Truy xuất ô nhớ
*x = *x + 1;
(cid:2) Thu hồi ô nhớ
C++: delete x;
C: free(x); 59 (cid:1) Các phép toán int data;
struct IntList next; }; (cid:1) struct IntList{ int data;
struct IntList *next; }; (cid:1) struct IntList{ 60 (cid:1) Yêu cầu con trỏ cuối trỏ ñến NULL ñể kết thúc ngoài và thời gian tồn tại lâu (cid:1) Tập tin có 2 thuộc tính : lưu trữ trong bộ nhớ mode: READ hoặc WRITE (cid:1) Tập tin có thể ñược truy nhập theo một trong hai (cid:2) Mở tập tin
(cid:2) ðọc tập tin
(cid:2) Ghi tập tin
(cid:2) ðóng tập tin 61 (cid:1) Các phép toán chủ yếu ñối với tập tin (cid:1) Khai báo biến tập tin (cid:1) Mở tập tin : RESET(biếnTậpTin) (cid:1) ðọc tập tin: READ(biếnTậpTin, b1, b2, ..., bN) (cid:1) Ghi tập tin : WRITE(biếnTậpTin, b1, b2, ..., bN): (cid:1) ðóng tập tin CLOSE(biếnTậpTin) 62 (cid:1) Khai báo biến tập tin FILE * FP = fopen("filename","mode"); mode : r, w, a, rw (cid:1) ðọc tập tin fread (ptr,size,n,FP); char *ptr; int n,size; (cid:1) Ghi tập tin Fwrite (ptr,size,n,FP); char *ptr; int n,size; (cid:1) ðóng tập tin
Fclose (FN) 63Kiểu ký tự
Kiểu do người dùng ñịnh nghĩa
Kiểu liệt kê
Miền con của số nguyên
Kiểu dữ liệu có cấu trúc
Mãng : một chiều (vector)
Mãng : một chiều (tt)
Mãng : một chiều (tt)
Mãng 2 hoặc nhiều chiều
Mãng 2 hoặc nhiều chiều (tt)
Mẫu tin
Mẫu tin (tt)
Mẫu tin có cấu trúc thay ñổi
ID : integer;
Dept : array [1..3] of char;
Age : integer
case Payclass: Paytype of
end
Mẫu tin có cấu trúc thay ñổi (tt)
Kiểu chuỗi ký tự
Kiểu chuỗi ký tự (tt)
Con trỏ (pointer)
Con trỏ (tt)
Con trỏ (tt)
Con trỏ - kiểu ñệ qui
Tập tin
Tập tin : Pascal
Tận tin : C