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

Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 10: Lớp lưu trữ của biến - Sự chuyển kiểu

34 2 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 34
Dung lượng 1 MB

Nội dung

Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 10: Lớp lưu trữ của biến - Sự chuyển kiểu. Bài giảng cung cấp cho học viên những kiến thức về khái niệm; biến toàn cục và biến cục bộ; biến tĩnh (static); biến REGISTER; khởi động trị cho biến ở các lớp; sự chuyển kiểu; định vị vùng nhớ cho các lớp lưu trữ;... Mời các bạn cùng tham khảo!

1 Các nội dung:        Khái niệm Biến toàn cục biến cục Biến tĩnh (static) Biến REGISTER Khởi động trị cho biến lớp Sự chuyển kiểu Định vị vùng nhớ cho lớp lưu trữ © TS Nguyễn Phúc Khải 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 © TS Nguyễn Phúc Khải KHÁI NIỆM  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: tầm sử dụng thời gian tồn biến © TS Nguyễn Phúc Khải KHÁI NIỆM  Tầm sử dụng (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à:   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) © TS Nguyễn Phúc Khải KHÁI NIỆM  Thời gian tồ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) © TS Nguyễn Phúc Khải KHÁI NIỆM Lớp biến Tự động Tĩnh Tồn cục (khơng kết hợp được) Biến toàn cục tĩnh Cục Biến cục tự động (hay biến tự động) Biến cục tĩnh Lớp biến © TS Nguyễn Phúc Khải BIẾN TỒN CỤC VÀ BIẾN CỤC BỘ  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  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 © TS Nguyễn Phúc Khải BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ [auto] kiểu danh_sách_tên_biến;  Ví dụ: int tong (int n) { auto int i; } © TS Nguyễn Phúc Khải BIẾN TỒN CỤC VÀ BIẾN CỤC BỘ  Biến tồn cục (global) hay cịn gọi biến ngồi biến khai báo bên tất hàm Biến sử dụng để liên kết trị hàm 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 tồn cục nằm tập tin nằm tập tin khác © TS Nguyễn Phúc Khải 10 BIẾN TĨNH int tong (int a) { static int tam = 0; tam += a; return tam; }  Trong chương trình trên, hàm tong(), ta có khai báo biến cục tĩnh, biến tam, biến khởi động trị lần đầu chương trình, trị 0, sau trị biến ln giữ lại cho lần sử dụng sau © TS Nguyễn Phúc Khải 20 BIẾN TĨNH  Hàm khai báo static sử dụng module mà khai báo định nghĩa mà Cú pháp khai báo định nghĩa hàm static sau: static kiểu tên_hàm (danh_sách_khai_báo_đối_số) { } © TS Nguyễn Phúc Khải 21 BIẾN REGISTER  Bộ dịch C cho phép tận dụng tài nguyên có sẵn máy để tối ưu hóa chương trình, tối ưu C cho phép lập trình viên sử dụng số ghi vi xử lý để khai báo biến, biến gọi biến ghi (register) Khai báo biến ghi: register kiểu danh_sách_tên_biến;  với kiểu kiểu khai báo cho biến, kiểu int, char, unsigned, long pointer © TS Nguyễn Phúc Khải 22 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 © TS Nguyễn Phúc Khải 23 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, 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)  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 © TS Nguyễn Phúc Khải 24 KHỞI ĐỘNG TRỊ CHO BIẾN Ở CÁC LỚP  Trong suốt trình chạy chương trình, biến tồ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 tồ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) © TS Nguyễn Phúc Khải 25 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 cịn 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ị © TS Nguyễn Phúc Khải 26 SỰ CHUYỂN KIỂU  Cho khai báo biến sau: int a = 10, b = 3; double d;  biểu thức cho kết đúng, giải thích? a) d = (double)(a/b); b) d = (double)a/b; c) d = a/(double)b; © TS Nguyễn Phúc Khải 27 ĐỊ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 © TS Nguyễn Phúc Khải 28 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ  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 đó) © TS Nguyễn Phúc Khải 29 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 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); // Tính thời gian theo số giây time = amount / rate; © TS Nguyễn Phúc Khải 30 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ // 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); } © TS Nguyễn Phúc Khải 31 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ Danh hiệu Kiểu Vị trí (offset) Tầm vực Amount int Main Rate int -1 Main Time Hours Minutes int int int -2 -3 -4 Main Main Main Seconds int -5 Main © TS Nguyễn Phúc Khải 32 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ  Đị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)   Vùng biến toàn cục nơi chứa tất biến toàn cục Tổng quát hơn, nơi chứa biến tĩnh Vùng stack thực thi nơi chứa biến cục  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 © TS Nguyễn Phúc Khải 33 © TS Nguyễn Phúc Khải 34 ... 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: tầm sử dụng thời gian tồn biến. .. niệm Biến toàn cục biến cục Biến tĩnh (static) Biến REGISTER Khởi động trị cho biến lớp Sự chuyển kiểu Định vị vùng nhớ cho lớp lưu trữ © TS Nguyễn Phúc Khải KHÁI NIỆM  Mỗi biến sử dụng chương trình. .. Tầm sử dụng (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à:   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)

Ngày đăng: 05/07/2022, 13:45

HÌNH ẢNH LIÊN QUAN

ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ - Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 10: Lớp lưu trữ của biến - Sự chuyển kiểu
ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ (Trang 28)
 Bộ dịch cần dùng một cách đúng đắn bảng biểu trưng để theo dõi các biến trong quá trình dịch - Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 10: Lớp lưu trữ của biến - Sự chuyển kiểu
d ịch cần dùng một cách đúng đắn bảng biểu trưng để theo dõi các biến trong quá trình dịch (Trang 28)
 Bảng biểu trưng - Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 10: Lớp lưu trữ của biến - Sự chuyển kiểu
Bảng bi ểu trưng (Trang 29)