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 - Nguyễn Phúc Khải

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ữ 
pdf 34 trang xuanthi 29/12/2022 2380
Bạn đang xem 20 trang mẫu của tài liệu "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 - Nguyễn Phúc Khải", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_he_thong_may_tinh_va_ngon_ngu_lap_trinh_chuong_10.pdf

Nội dung text: 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 - Nguyễn Phúc Khải

  1. Các nội dung: . 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ữ © TS. Nguyễn Phúc Khải 2
  2. KHÁI NIỆM . Dựa vào cách mà biến được lưu trữ và sử dụng, biến sẽ ở một trong các lớp lưu trữ khác nhau sau đây:  Lớp biến tự động  Lớp biến toàn cục và biến cục bộ  Lớp biến tĩnh  Lớp biến thanh ghi . Có hai đặc tính quan trọng: tầm sử dụng và thời gian tồn tại của biến. © TS. Nguyễn Phúc Khải 4
  3. KHÁI NIỆM . Thời gian tồn tại (time life) xác định rằng biến với giá trị đang tồn tại trong nó sẽ có ý nghĩa đến lúc nào. Sinh ra 2 lớp:  lớp biến tự động (auto)  lớp biến tĩnh (static) © TS. Nguyễn Phúc Khải 6
  4. BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ . Biến cục bộ, còn gọi là biến tự động (auto), là các biến được khai báo ngay sau cặp dấu móc { và } (cặp dấu này như đã biết để bắt đầu cho một lệnh phức hoặc một thân hàm), hoặc là các biến được khai báo trong danh sách đối số của hàm. . Khi khai báo biến cục bộ ta có thể đặt hoặc không đặt từ khóa auto phía trước khai báo biến cục bộ. © TS. Nguyễn Phúc Khải 8
  5. BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ . Biến toàn cục (global) hay còn gọi là biến ngoài là biến được khai báo ở bên ngoài tất cả các hàm. Biến này có thể được sử dụng để liên kết trị giữa các hàm khác nhau mà việc truyền theo tham số trở nên rắc rối và phức tạp. Các hàm sử dụng chung biến toàn cục có thể nằm trong cùng một tập tin hoặc có thể nằm trong các tập tin khác nhau. © TS. Nguyễn Phúc Khải 10
  6. BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ void swap(void) { if (b> a) { auto int temp; temp = a; a = b; b = temp; } } © TS. Nguyễn Phúc Khải 12
  7. BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ . Tương tự cho hàm: extern kiểu tên_hàm (danh_sách_khai_báo_đối_số); . Khai báo này thật sự chỉ là prototype của hàm thêm từ khóa extern phía trước. © TS. Nguyễn Phúc Khải 14
  8. BIẾN TĨNH . Ví dụ: static int a; main() { clrscr(); } int func(void) { static int b; } © TS. Nguyễn Phúc Khải 16
  9. BIẾN TĨNH . Ví dụ: Xét chương trình tính tổng s = 1 + + n . dùng hàm trong đó có khai báo biến static. © TS. Nguyễn Phúc Khải 18
  10. BIẾN TĨNH int tong (int a) { static int tam = 0; tam += a; return tam; } . Trong chương trình trên, trong hàm tong(), ta có khai báo một biến cục bộ tĩnh, biến tam, biến này chỉ được khởi động trị một lần đầu chương trình, trị 0, sau đó trị của biến này luôn được giữ lại cho lần sử dụng sau. © TS. Nguyễn Phúc Khải 20
  11. BIẾN REGISTER . Bộ dịch C cho phép tận dụng các tài nguyên có sẵn của máy để tối ưu hóa chương trình, một trong các tối ưu này là C cho phép lập trình viên sử dụng một số thanh ghi của bộ vi xử lý để khai báo biến, biến này gọi là biến thanh ghi (register). Khai báo biến thanh ghi: register kiểu danh_sách_tên_biến; . với kiểu là kiểu khai báo cho biến, kiểu này chỉ có thể là int, char, unsigned, long hoặc pointer © TS. Nguyễn Phúc Khải 22
  12. KHỞI ĐỘNG TRỊ CHO BIẾN Ở CÁC LỚP . Đối với biến toàn cục hoặc biến tĩnh, ngay sau khi được khai báo, sẽ được tự động gán trị là 0. . Trong khi đó biến tự động và biến thanh ghi sẽ có giá trị không xác định (gọi là trị rác). . Việc khởi động cho các biến thuộc kiểu dữ kiện có cấu trúc như mảng (array), struct và union chỉ có thể thực hiện được đối với các biến toàn cục hoặc biến tĩnh. © TS. Nguyễn Phúc Khải 24
  13. SỰ CHUYỂN KIỂU . Khi thực hiện các phép toán số học hoặc luân lý, C luôn thực hiện sự chuyển kiểu tự động. . C còn cho phép lập trình viên thực hiện việc chuyển kiểu bắt buộc, ép kiểu (type casting). Cú pháp để ép kiểu một biến, hằng hay biểu thức: (type) giá_trị © TS. Nguyễn Phúc Khải 26
  14. ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ . Có hai cơ chế cơ bản giúp bộ dịch làm công việc này:  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ộ dịch cũng theo một sự phân chia bộ nhớ hệ thống, nó cẩn thận định vị bộ nhớ cho các biến dựa vào các đặc tính cụ thể, với các vùng nhớ xác định dành riêng cho các đối tượng đặc biệt. © TS. Nguyễn Phúc Khải 28
  15. ĐỊ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 và tốc độ truyền của mạng printf (“Có bao nhiêu byte dữ liệu được 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
  16. ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ Vị trí Danh hiệu Kiểu Tầm vực (offset) Amount int 0 Main Rate int -1 Main Time int -2 Main Hours int -3 Main Minutes int -4 Main Seconds int -5 Main © TS. Nguyễn Phúc Khải 32
  17. © TS. Nguyễn Phúc Khải 34