Bài giảng Kỹ thuật lập trình - Bài 2: Lớp lưu trữ - Lê Gia Minh

ppt 21 trang hoanguyen 3870
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Bài 2: Lớp lưu trữ - Lê Gia Minh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_ky_thuat_lap_trinh_bai_2_lop_luu_tru.ppt

Nội dung text: Bài giảng Kỹ thuật lập trình - Bài 2: Lớp lưu trữ - Lê Gia Minh

  1. Kỹ thuật Lập trình Lớp lưu trữ 1
  2. Nội dung ¡ Phạm vi sử dụng và thời gian tồn tại của một biến ¡ Biến nội ¡ Biến ngoài ¡ Biến tĩnh (static) ¡ Biến register 2
  3. Phạm vi sử dụng và thời gian tồn tại của một biến ¡ Biến phải được khai báo trước khi sử dụng ¡ Khai báo : l Trong hàm l Ngòai tất cả hàm ¡ Phạm vi nhìn thấy(scope) của 1 biến là phần chương trình mà trong đó biến có thể được sử dụng. 3
  4. Phạm vi sử dụng và thời gian tồn tại của một biến(tt) ¡ Thời gian tồn tại của biến : biến tồn tại thường trực hay tạm thời trong bộ nhớ. ¡ Phạm vi nhìn thấy – thời gian tồn tại khác nhau của các biến tạo nên những lớp lưu trữ (storage class) khác nhau. 4
  5. Biến nội ¡ Còn gọi là biến tự động(auto) ¡ Là các biến được khai báo bên trong của một hàm, tham số của hàm void Func() { auto int i; int c ; // auto ngầm định } 5
  6. Biến nội (tt) ¡ Hàm tính tổng các số nguyên từ 1 đến N – với N là tham số của hàm int Sigma(int N) { int sum = 0 , i ; for(i = 0 ; i<=N ; i++) sum +=i; return sum } sum , N , i là biến auto 6
  7. Biến nội – Đặc tính ¡ Phạm vi nhìn thấy từ chỗ biến được khai báo cho đến hết khối lệnh chứa khai báo biến. ¡ Hàm khác không sử dụng được ¡ Được cấp chỗ tạm thời tại 1 vùng riêng (stack) lúc hàm được gọi và bị hũy ngay khi hết khối hoặc hết hàm ¡ Không tốn chỗ trong bộ nhớ 7
  8. Biến ngòai ¡ Còn gọi là biến tòan cục(global) ¡ Được khai báo bên ngòai của tất cả mọi hàm(kể cả hàm main) #include int len; char str[1000]; void main() { int i ; do { getStr(); if (len > 0 ) printf(“ %s” , str); } while(len); } 8
  9. Biến ngoài (tt) void getStr() { char c ; len = 0 ; while( (c = getchar()) != EOF && c!=‘\n’) { str[len++] = c; } str[len] = ‘\0’; } 9
  10. Biến ngoài – Đặc tính ¡ Phạm vi của biến ngòai là toàn bộ chương trình ¡ Mọi hàm trong chương trình đều có thể dùng biến ngòai. ¡ Được cấp vùng nhớ riêng, tồn tại thường trực trong bộ nhớ trong suốt thời gian chương trình còn làm việc. ¡ Giá trị của chúng luôn luôn có ý nghĩa và có thể bị thay đổi bởi bất cứ hàm nào trong chương trình. 10
  11. Dùng biến ngòai khi . ¡ Khi có nhiều hàm cùng sử dụng chung 1 số giá trị nào đó – Lúc này việc truyền đối số cho hàm sẽ phức tạp và khó khăn. ¡ Khi cần sử dụng nhiều lần giá trị nào đó và lưu giữ qua mỗi lần làm việc. 11
  12. Không dùng biến ngoài vì ¡ Chiếm chỗ thường trực trong bộ nhớ ngay cả lúc chúng ta chưa dùng đến nó. ¡ Các hàm sử dụng biến ngòai sẽ bị lệ thuộc vào biến này do vậy mất tính tổng quát. ¡ Ảnh hưỡng cấu trúc chương trình. Hiệu ứng lề khó bug chương trình. 12
  13. Mất tính tổng quát. float a, b ; float Mean(float a, float b) { float Mean() return (a+b)/2; { } return (a+b)/2; } 13
  14. Biến extern ¡ Trong C , một chương trình có thể nằm rải rác trên nhiều tập tin nguồn khác nhau. ¡ Các tập tin này có thể biên dịch riêng rẽ và ở giai đọan link chúng mới nối lại với nhau ¡ Khả năng 1 biến được khai báo ở tập tin nguồn A lại được sử dụng ở tập tin nguồn B Extern kiểu tênbiếnngòai; Thí dụ : extern int Total 14
  15. Khai báo biến extern trên 2 tt 15
  16. Extern ¡ Nếu khai báo biến extern trong 1 hàm thì chỉ sử dụng trong hàm đó mà thôi ¡ Thí dụ trong tập tin Extern1.C void write_extern() { extern int count; printf(“count is %i\n” , count); } 16
  17. Biến tĩnh (static) ¡ Khai báo : kiễu tenbien l static int Num ; ¡ Biến tĩnh là biến tòan cục bị che ¡ Biến tĩnh tồn tại thường trực trong bộ nhớ và giá trị không mất đi khi ra khỏi hoặc trở vào hàm chứa nó 17
  18. Hàm static ¡ Chỉ được các hàm nằm trong cùng tập tin nguồn với hàm static truy xuất. Các hàm từ tập tin khác không thấy hàm này. static int numDay(int month,int year) { } void useNumDay() Cùng 1 tập tin nguồn { int kq = numDay(6,2006) } 19
  19. Biến register ¡ Còn gọi là biến thanh ghi ¡ Khai báo : l register kieu tenbien ; l Thi du : register int count; ¡ Biến này tương tự như biến auto nhưng được tối ưu lưu trữ trong thanh ghi của CPU nên truy xuất nhanh 20
  20. Biến thanh ghi ¡ Thường dùng làm biến chạy của vòng lặp l register int I ; l for (i = 0 ; i<N ; i++) . ¡ Chỉ chấp nhận : int , char, unsigned int , long mà thôi ¡ Số biến thanh ghi khai báo cho 1 hàm không nhiều (2), nếu cấp phát không được sẽ xem như biến auto. 21