Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 42 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
42
Dung lượng
202,4 KB
Nội dung
CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 Khái niệm 10.2 Biến toàn cục biến cục 10.3 Biến tónh (static) 10.4 Biến REGISTER 10.5 Khởi động trị cho biến lớp 10.6 Sự chuyển kieåu 10.6 Định vị vùng nhớ cho lớp lưu trữ Bài tập cuối chương CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Mỗi biến sử dụng chương trình phải khai báo, nhiên biến khai báo nhiều chỗ chương trình, biến khai báo hàm, hàm , chỗ làm cho biến có khả sử dụng khác nhau, từ hình thành nên lớp lưu trữ biến CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Đối với C, dựa vào cách mà biến lưu trữ sử dụng, biến lớp lưu trữ khác sau đây: - Lớp biến tự động - Lớp biến toàn cục biến cục - Lớp biến tónh - Lớp biến ghi Có hai đặc tính quan trọng biến: tầm sử dụng biến thời gian tồn biến CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Tầm sử dụng biến (scope) nơi mà biến sử dụng lệnh chương trình Do đặc tính mà ta có hai lớp lưu trữ khác - lớp lưu trữ biến toàn cục (global storage class) - lớp lưu trữ biến cục (local storage class) CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Thời gian tồn biến (time life) xác định biến với giá trị tồn có ý nghóa đến lúc Sinh lớp: -lớp biến tự động (auto) -lớp biến tónh (static) CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Lớp biến Tự động Tónh (không kết hợp được) Biến toàn cục tónh Biến cục tự động Biến cục tónh Lớp biến Toàn cục Cục (hay biến tự động) CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.2 BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ 10.2.1 Biến cục Biến cục bộ, gọi biến tự động (auto), biến khai báo sau cặp dấu móc { } (cặp dấu biết để bắt đầu cho lệnh phức thân hàm), biến khai báo danh sách đối số hàm CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.2 BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ 10.2.1 Biến cục Khi khai báo biến cục ta đặt không đặt từ khóa auto phía trước khai báo biến cục theo cú pháp sau: [auto] kiểu danh_sách_tên_biến; Ví dụ: int tong (int n) { auto int i; } CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.2 BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ 10.2.1 Biến cục Khi khai báo biến cục ta đặt không đặt từ khóa auto phía trước khai báo biến cục theo cú pháp sau: [auto] kiểu danh_sách_tên_biến; Ví dụ: int tong (int n) { auto int i; } CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.2 BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ 10.2.1 Biến cục Ví dụ : Xét chương trình xếp hai số, in kết theo thứ tự từ lớn tới nhỏ CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.4 BIẾN REGISTER Tầm sử dụng thời gian tồn biến ghi tương tự biến cục bộ, chúng truy xuất nhanh biến cục bình thường chúng ghi vi xử ly Các biến ghi thường sử dụng làm biến điều khiển vòng lặp biến phải truy xuất nhiều lần chương trình CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.5 KHỞI ĐỘNG TRỊ CHO BIẾN Ở CÁC LỚP Đối với biến toàn cục biến tónh, sau khai báo, biến C tự động gán trị Trong biến tự động biến ghi có giá trị không xác định (gọi trị rác) trị biểu thức CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.5 KHỞI ĐỘNG TRỊ CHO BIẾN Ở CÁC LỚP Trong suốt trình chạy chương trình, biến toàn cục biến tónh khởi động trị lần, lần mà khai báo biến thực thi Biến toàn cục biến tónh khởi động trị biểu thức Biến tự động biến ghi khởi động trị biểu thức mà giá trị biểu thức tới lúc xác định(có thể gọi hàm) CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.5 KHỞI ĐỘNG TRỊ CHO BIẾN Ở CÁC LỚP Việc khởi động cho biến thuộc kiểu kiện có cấu trúc mảng (array), struct union thực biến toàn cục biến tónh mà CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.6 SỰ CHUYỂN KIỂU Khi thực phép toán số học luân lý, C thực chuyển kiểu tự động C cho phép lập trình viên thực việc chuyển kiểu bắt buộc, ép kiểu (type casting) Cú pháp để ép kiểu biến, hay biểu thức: (type) giá_trị CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.6 SỰ CHUYỂN KIỂU Ví dụ: Cho khai báo biến sau: int a = 10, b = 3; double d; bieåu thức cho kết đúng, giải thích?(xem lại thứ tự ưu tiên phép toán C) a) d = (double)(a/b); b) d = (double)a/b; c) d = a/(double)b; CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ Có hai chế giúp dịch làm công việc này: -Bộ dịch cần dùng cách đắn bảng biểu trưng để theo dõi biến trình dịch -Bộ dịch theo phân chia nhớ hệ thống, cẩn thận định vị nhớ cho biến dựa vào đặc tính cụ thể, với vùng nhớ xác định dành riêng cho đối tượng đặc biệt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.1 Bảng biểu trưng Bộ dịch C theo dõi biến chương trình với bảng biểu trưng Mỗi đầu vào bảng biểu trưng cho biến chứa: (1) tên biến, (2) kiểu biến, (3) vị trí nhớ mà biến định vị (4) danh hiệu định khu vực mà biến khai báo (tức tầm vực biến đó) CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.1 Bảng biểu trưng Ví dụ 11.18: Chương trình tính tốc độ mạng #include int main() { int amount; int rate; int time; int hours; int minutes; int seconds; // Nhập: số lượng byte tốc độ truyền mạng printf (“Có byte liệu truyền? ”); scanf (“%d”, &amount); printf (“Tốc độ truyền (bytes/giây)? ”); scanf (“%d”, &rate); CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.1 Bảng biểu trưng Ví dụ 11.18: Chương trình tính tốc độ mạng // Tính thời gian theo số giây time = amount / rate;` // Chuyển thời gian sang giờ, phút giây hours = time / 3600;// 3600 giây minutes = (time % 3600) / 60;// 60 giây phút seconds = (time % 3600) % 60;// phần dư lại giây // Xuất kết printf(“Thời gian: %dh %dm %ds\n”, hours, minutes, seconds); } CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.1 Bảng biểu trưng Danh hiệu Kiểu Vị trí (offset) Amount int Main Hours int -3 Main Minutes int -4 Main Rate int -1 Main Seconds int -5 Main Time int -2 Main Tầm vực CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.2 Định vị vùng nhớ cho biến Có hai vùng nhớ mà biến C định vị đó: vùng liệu toàn cục (global data section) ngăn xếp thực thi (run-time stack) (ngồi cịn có biến ghi) - Vùng biến toàn cục nơi chứa tất biến tồn cục Tổng qt hơn, nơi chứa biến tĩnh - Vùng stack thực thi nơi chứa biến cục (hay lớp biến lưu trữ tự động) Vùng offset bảng biểu trưng cung cấp thơng tin xác vị trí nhớ biến Nó cho biết số nhớ tính từ địa vùng nhớ chứa biến CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU BÀI TẬP CUỐI CHƯƠNG Viết hàm cho lần gọi hàm hàm trả trị số sau trị trước dãy số Fibonaci Viết chương trình với hàm tính biểu thức sau đây: dùng không dùng biến ghi t= T= + + n + + (n − 1) + + (n − 2) − + − + n! (n − 1)! (n − 2)! 1! (1 + + n) + (1 + + (n − 1)) + (1 + + (n − 2)) + + 1! n !+ (n − 1)! + (n − 2)! + + 1! CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU BÀI TẬP CUỐI CHƯƠNG Viết chương trình gồm hai module: main.c func.c, module main.c lưu hàm main() có lệnh gọi nhập ba hệ số tam thức bậc hai, kiểm tra in ấn; module func.c lưu hàm cần thiết để giải phương trình bậc hai biện luận tam thức bậc hai In hình số nguyên tố từ đến 1.000 Dùng biến ghi không dùng biến ghi Kiểm tra thời gian CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU KẾT THÚC CHƯƠNG 10 ... biến tự động) CHƯƠNG 10 LỚP LƯU TRỮ C? ??A BIẾN SỰ CHUYỂN KIỂU 10. 2 BIẾN TOÀN C? ? ?C VÀ BIẾN C? ? ?C BỘ 10. 2.1 Biến c? ? ?c Biến c? ? ?c bộ, gọi biến tự động (auto), biến khai báo sau c? ??p dấu m? ?c { } (c? ??p dấu biết... bắt đầu cho lệnh ph? ?c thân hàm), biến khai báo danh sách đối số hàm CHƯƠNG 10 LỚP LƯU TRỮ C? ??A BIẾN SỰ CHUYỂN KIỂU 10. 2 BIẾN TOÀN C? ? ?C VÀ BIẾN C? ? ?C BỘ 10. 2.1 Biến c? ? ?c Khi khai báo biến c? ? ?c ta đặt... kh? ?c mà vi? ?c truyền theo tham số trở nên r? ?c rối ph? ?c tạp C? ?c hàm sử dụng chung biến toàn c? ? ?c nằm tập tin nằm tập tin kh? ?c CHƯƠNG 10 LỚP LƯU TRỮ C? ??A BIẾN SỰ CHUYỂN KIỂU 10. 2 BIẾN TOÀN C? ? ?C VÀ