Phạm vi hiển thị và tuổi thọ của biến
Có hai loại phạm vi cơ bản: phạm vi cục bộ và phạm vi toàn cục.
Một biến được khai báo bên ngoài tất cả các hàm thuộc phạm vi toàn cục. Việc truy cập vào các biến như vậy có thể được thực hiện từ bất kỳ đâu trong chương trình. Các biến này nằm trong nhóm bộ nhớ toàn cục, vì vậy tuổi thọ của chúng trùng với tuổi thọ của chương trình.
Một biến được khai báo bên trong một khối (phần mã được bao trong dấu ngoặc nhọn) thuộc phạm vi cục bộ. Biến như vậy không hiển thị (và do đó không khả dụng) bên ngoài khối mà nó được khai báo. Trường hợp khai báo cục bộ phổ biến nhất là biến được khai báo trong một hàm. Biến được khai báo cục bộ nằm trên ngăn xếp, và tuổi thọ của biến như vậy bằng tuổi thọ của hàm.
Vì phạm vi của một biến cục bộ là khối mà nó được khai báo, có thể khai báo các biến có cùng tên với các biến được khai báo trong các khối khác; cũng như với những biến được khai báo ở các cấp độ cao hơn, lên đến cấp độ toàn cục.
Ví dụ:
void CalculateLWMA(int rates_total,int prev_calculated,int begin,const double &price[])
{
int i,limit;
static int weightsum=0;
double sum=0;
//---
if(prev_calculated==0)
{
limit=MA_Period+begin;
//--- đặt giá trị rỗng cho các thanh đầu tiên giới hạn
for(i=0; i<limit; i++) LineBuffer[i]=0.0;
//--- tính giá trị hiển thị đầu tiên
double firstValue=0;
for(int i=begin; i<limit; i++)
{
int k=i-begin+1;
weightsum+=k;
firstValue+=k*price[i];
}
firstValue/=(double)weightsum;
LineBuffer[limit-1]=firstValue;
}
else
{
limit=prev_calculated-1;
}
for(i=limit;i<rates_total;i++)
{
sum=0;
for(int j=0; j<MA_Period; j++) sum+=(MA_Period-j)*price[i-j];
LineBuffer[i]=sum/weightsum;
}
//---
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Hãy chú ý đến biến i
, được khai báo ở dòng
for(int i=begin; i<limit; i++)
{
int k=i-begin+1;
weightsum+=k;
firstValue+=k*price[i];
}
2
3
4
5
6
Phạm vi của nó chỉ là vòng lặp for
; bên ngoài vòng lặp này có một biến khác cùng tên, được khai báo ở đầu hàm. Ngoài ra, biến k
được khai báo trong thân vòng lặp, phạm vi của nó là thân vòng lặp.
Biến cục bộ có thể được khai báo với đặc tả truy cập tĩnh. Trong trường hợp này, trình biên dịch đặt biến trong nhóm bộ nhớ toàn cục. Do đó, tuổi thọ của một biến tĩnh bằng tuổi thọ của chương trình. Ở đây, phạm vi của biến như vậy bị giới hạn trong khối mà nó được khai báo.
Xem thêm
Kiểu dữ liệu, Đóng gói và mở rộng kiểu, Khởi tạo biến, Tạo và xóa đối tượng