Bài giảng Hệ thống máy tính và ngôn ngữ C - 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ÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.1 Khaùi nieäm  
10.2 Bieán toaøn cuïc vaø bieán cuïc boä  
10.3 Bieán tónh (static)  
10.4 Bieán REGISTER  
10.5 Khôûi ñoäng trò cho bieán ôû caùc lôùp  
10.6 Söï chuyeån kieåu  
10.6 Định vị vùng nhớ cho các lớp lưu trữ  
Baøi taäp cuoái chöông  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.1 KHAÙI NIEÄM  
Moãi bieán khi ñöôïc söû duïng trong chöông trình ñeàu phaûi  
ñöôïc khai baùo, unhen ben cù theå ñöôïc khai baùo ôû  
nhieàu choã trong chöông trình, bieán coù theå ñöôïc khai baùo  
trong haøm, ngoaøi haøm..., moãi choã nhö vaäy seõ laøm cho bieán  
coù khaû naêng söû dung khùc nhauöñoù hnh thaønh neân caùc  
lôùp löu tröõ bieán.  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.1 KHAÙI NIEÄM  
Ñoái vôùi C, döïa vaøo caùch maø bieán ñöôïc löu tröõ vaø söû duïng,  
bieán seõ ôû moät trong caùc lôùp löu tröõ khaùc nhau sau ñaây:  
- Lôùp bieán töï ñoäng  
- Lôùp bieán toaøn cuïc vaø bieán cuïc boä  
- Lôùp bieán tónh  
- Lôùp bieán thanh ghi  
Coù hai ñaëc tính quan troïng cuûa moät bieán: taàm söû duïng cuûa  
bieán vaø thôøi gian toàn taïi cuûa bieán.  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.1 KHAÙI NIEÄM  
Taàm söû duïng cuûa bieán (scope) laø nôi maø bieán coù theå ñöôïc  
söû duïng trong caùc leänh cuûa chöông trình. Do ñaëc tính naøy  
maø ta coù hai lôùp löu tröõ khaùc nhau laø  
- lôùp löu tröõ bieán toaøn cuïc (global storage class)  
- lôùp löu tröõ bieán cuïc boä (local storage class).  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.1 KHAÙI NIEÄM  
Thôøi gian toàn taïi cuûa bieán (time life) xaùc ñònh raèng bieán vôùi  
giaù trò ñang toàn taïi trong noù seõ coù yù nghóa ñeán luùc naøo. Sinh  
ra 2 lôùp:  
-lôùp bieán töï ñoäng (auto)  
-lôùp bieán tónh (static)  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.1 KHAÙI NIEÄM  
Lôùp bieán  
Töï ñoäng  
Tónh  
Lôùp bieán  
Toaøn cuïc  
(khoâng keát  
hôïp ñöôïc)  
Bieán toaøn  
cuïc tónh  
Beán cïc bo
töï ñoäng  
Beán cuïc boä  
tónh  
Cuïc boä  
(hay bieán töï  
ñoäng)  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.1 Bieán cuïc boä  
Bieán cuïc boä, coøn goïi laø bieán töï ñoäng (auto), laø caùc bieán ñöôïc  
khai baùo ngay sau caëp daáu moùc { vaø } (caëp daáu naøy nhö ñaõ  
bieát ñeå baét ñaàu cho moät leänh phöùc hoaëc moät thaân haøm),  
hoaëc laø caùc bieán ñöôïc khbaùrong danh saùch ñoái soá cuûa  
haøm.  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.1 Bieán cuïc boä  
Khi khai baùo bieán cuïc boä ta coù thñaët hoaëc khoâng ñaët töø  
khoùa auto phía tröôùc khai baùo bieán cuïc boä theo cuù phaùp nhö  
sau:  
[auto] kieåu danh_saùch_teân_bieán;  
Ví duï:  
int tong (int n)  
{
auto int i;  
...  
}
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.1 Bieán cuïc boä  
Khi khai baùo bieán cuïc boä ta coù theå ñaët hoaëc khoâng ñaët töø  
khoùa auto phía tröôùc khai baùo bieán cuïc boä theo cuù phaùp nhö  
sau:  
[auto] kieåu danh_saùch_teân_bieán;  
Ví duï:  
int tong (int n)  
{
auto int i;  
...  
}
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.1 Bieán cuïc boä  
Ví duï :  
Xeùt chöông trình saép xeáp hai soá, in ra keát quaû theo thöù töï  
töø lôùn tôùi nhoû  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.1 Bieán cuïc boä  
#include <stdio.h>  
#include <conio.h>  
main()  
{
auto int a, b;  
clrscr();  
printf ("Moi nhap hai so: ");  
scanf ("%d %d", &a, &b);  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.1 Bieán cuïc boä  
if (b> a)  
{
auto int temp;  
temp = a;  
a = b;  
b = temp;  
}
printf("Ket qua sap xep hai so: %d %d \n", a, b);  
getch();  
}
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.2 Bieán toaøn cuïc  
Bieán toaøn cuïc (globl) hacoøn abián ngoaøi laø bieán ñöôïc  
khai baùo ôû beân ngoaøi taát caû caùc haøm. Bieán naøy coù theå ñöôïc  
söû duïng ñeå lieân keát trò giöõa caùc haøm khaùc nhau maø vieäc  
truyeàn theo tham sonen rc roi vaø phöùc taïp. Caùc haøm  
söû duïng chung bieán toaøn cuïc coù theå naèm trong cuøng moät taäp  
tin hoaëc coù theå naèm trong caùc taäp tin khaùc nhau.  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.2 Bieán toaøn cuïc  
Ví duï : Xeùt chöông trình ví duï sau:  
#include <stdio.h>  
#include <conio.h>  
int a, b;  
void swap(void);  
main()  
{
clrscr();  
printf ("Moi nhap hai so: ");  
swap();  
scanf ("%d %d", &a, &b);  
printf ("Ket qua sap xep hai so: %d %d \n", a, b);  
getch();  
}
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.2 Bieán toaøn cuïc  
void swap(void)  
{
if (b> a)  
{
auto int temp;  
temp = a;  
a = b;  
b = temp;  
}
}
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.2 Bieán toaøn cuïc  
Nhö vaäy, neáu coù mot bien on cc no ñoù ñaõ ñöôïc khai baùo  
trong moät module cuûa chöông trình, vaø moät haøm trong moät  
module khaùc laïi muoán söû duïng bieán naøy ñeå truyeàn trò, C ñöa  
ra cuù phaùp sau ñaây:  
extern kieåu teân_bieán_toaøn_cuïc;  
Khai baùo naøy ñöôïc ñaët ñaàu module chöông trình chöùa haøm  
söû duïng bieán toaøn cuïc.  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.2 BIEÁN TOAØN CUÏC VAØ BIEÁN CUÏC BOÄ  
10.2.2 Bieán toaøn cuïc  
Töông töï cho haøm:  
extern kieåu teân_haøm (danh_saùch_khai_baùo_ñoái_soá);  
Khai baùo naøy thaät söï chæ laø prototype cuûa haøm theâm töø  
khoùa extern phía tröôùc.  
Ví duï 11.6 (trang 327-328)  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.3 BIEÁN TÓNH (STATIC)  
Ñeå khai baùo bieán tónh ta caàn theâm töø khoùa static tröôùc  
khai baùo bieán bình thöôøng, cuphaùp nhö sau:  
static kieåu danh_saùch_teân_bieán;  
Bieán toaøn cuïc tónh laø bieán khai baùo ngoaøi taát caû caùc haøm,  
trong moät module chöông trình naøo ñoù vaø chæ coù yù nghóa söû  
duïng bôûi caùc haøm trong cuøng module ñoù maø thoâi. Caùc haøm  
trong caùc module khaùc cuûa chöông trình khoâng theå söû duïng  
ñöôïc caùc bieán toaøn cuïc daïng static nhö theá naøy.  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.3 BIEÁN TÓNH (STATIC)  
Bieán cuïc boä tónh laø caùc bieán ñöôïc khai baùo trong haøm vaø chæ  
coù yù nghóa söû duïng trong haøm coù khai baùo ñoù maø thoâi.  
Nhöng caùc bieán cuïc boä tónh khaùc vôùi bieán cuïc boä (hay töï  
ñoäng) ôû thôøi gian toàn taïi, bieán tónh toàn taïi suoát trong boä  
nhôù töø luùc noù ñöôïc söû duïng laàn ñaàu tieân cho ñeán khi keát  
thuùc chöông trình, vaø giaù trò cuûa chuùng khoâng heà maát ñi khi  
ra khoûi hoaëc trôû vaøo haøm chöùa noù.  
CHÖÔNG 10  
LÔÙP LÖU TRÖÕ CUÛA BIEÁN  
SÖÏ CHUYEÅN KIEÅU  
10.3 BIEÁN TÓNH (STATIC)  
Ví duï :  
static int a;  
main()  
{
}
clrscr();  
...  
int func(void)  
{
static int b;  
...  
}
Tải về để xem bản đầy đủ
pdf 41 trang yennguyen 12/04/2022 6220
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ữ C - Chương 10: Lớp lưu trữ của biến sự chuyển kiểu", để 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_c_chuong_10_lop_luu.pdf