Bài 9 Biến cục bộ và biến toàn cục
Khai báo một hàm Kiểu trả về Tên hàm (kiểu tham số, kiểu tham số.); Tham số là tùy chọn
Bạn đang xem nội dung tài liệu Bài 9 Biến cục bộ và biến toàn cục, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bài 9
BIẾN CỤC BỘ VÀ BIẾN TOÀN CỤC
Khai Báo Hàm
Khai báo một hàm
Kiu tr v Tên hàm (kiểu tham số, kiểu
tham số....);
Tham số là tùy chọn
Tầm vực
Tầm vực xác định phạm vi mà một biến có
thể được truy xuất.
Tầm vực cũng xác định thời gian tồn tại của
một biến
Có ba loại biến: biến cục bộ, tham số hình
thức và biến toàn cục.
Biến cục bộ
Biến được khai báo bên trong một hàm được
gọi là biến cục bộ
C++ cũng cho phép khái niệm biến cục bộ
bên trong một khối mã.
Biến cục bộ chỉ có thể được dùng bên trong
khối mã mà nó được khai báo.
Biến cục bộ bên trong một khối mã chỉ tồn tại
khi khối mã đó đang thực thi
Khối mã phổ biến nhất là hàm.
Thân hàm là ẩn đối với phần còn lại của
chương trình và vì vậy chúng không ảnh
hưởng hay bị ảnh hưởng bởi các phần khác.
Dữ liệu và mã của hàm không thể tương tác
với dữ liệu và mã của hàm khác vì hai hàm
có tầm vực khác nhau.
Các biến được khai báo bên trong một hàm
không ảnh hửong đến biến trong một hàm
khác, ngay cả khi chúng có tên trùng nhau.
ví dụ
#include
using namespace std;
void f1();
int main()
{
char str[] = "this is str in main()";
cout << str << '\n';
f1();
cout << str << '\n';
return 0;
}
void f1()
{
char str[80];
cout << "Enter something: ";
cin >> str;
cout << str << '\n';
}
Khi một biến cục bộ trùng tên với một biến bên
ngoài khối mã mà nó được khai báo thì biến bên
ngoài không bị ảnh hưởng trong khối mã đó.
Ví dụ: int main()
{ int i=10, j =100;
if (j>0) {
int i;
i = j/2;
cout<<" giá trị i bên trong: "<<i<<'\n';
}
cout<<"giá trị i bên ngoài :"<<i<<'\n';
return 0;
}
Biến toàn cục
Biến toàn cục được khai báo bên ngoài các
hàm
Biến toàn cục có ảnh hưởng toàn bộ chương
trình, ngoại trừ bị phủ quyết bởi biến cục bộ
có cùng tên trong một hàm.
Ví dụ:
void drill();
int count; // count and num_right are global
int num_right;
int main()
{
cout << "Thử bao nhiêu lần: ";
cin >> count;
num_right = 0;
do {
drill();
count--;
} while(count);
cout << "Bạn có " << num_right << " lần đúng.\n";
return 0;
}
void drill()
{
int count, a, b, ans;
// Phát sinh số ngẫu nhiên giữa 0 và 99.
a = rand() % 100;
b = rand() % 100;
for(count=0; count<3; count++) {
cout << "Tổng " << a << " + " << b << "? ";
cin >> ans;
if(ans==a+b) {
cout << "Đúng\n";
num_right++;
return;
}
}
cout << "Đáp án là " << a+b << '\n';
}
Các tham số hình thức
Nếu hàm dùng các tham số thì phải khai báo
các biến để nhận giá trị của các tham số này.
Các biến này được gọi là tham số hình thức.
Các tham số hình thức tác động như biến
cục bộ bên trong một hàm. Tầm vực của
tham số là phạm vi trong hàm chứa nó.
Ví dụ:
test(int a, int b)
Gọi hàm với con trỏ
#include
using namespace std;
void f(int *j);
int main()
{
int i;
int *p;
p = &i; // p trỏ i
f(p);
cout << i; // i = 100
return 0;
}
void f(int *j)
{
*j = 100; /*biến được trỏ bởi j
được gán 100*/
}
có thể thay f(&i)
Viết hàm có hai tham số cube(int *n, int m) để
tính m giá trị:
(*n)3 (*n+1)3 (*n+2)3.......(*n+m-1)3
void cube(int *n, int num)
{
while(num) {
*n = *n * *n * *n;
num--;
n++;
}
}
Tham số argc và argv
Muốn truyền thông tin vào một chương trình khi
chạy nó, dùng các tham số dòng lệnh truyền vào
cho hàm main(). Một tham số dòng lệnh là thông tin
theo sau dòng lệnh của hệ điều hành.
Ví dụ muốn biên dịch chương trình C++ từ giao diện
dòng lệnh của hệ điều hành, dùng
cl tên chng trình
C++ định nghĩa hai tham số tùy chọn của hàm
main() là argc và argv, chúng nhận tham số dòng
lệnh.
Tham số argc là một số integer chỉ ra số tham số trên dòng lệnh.
Nó luôn có giá trị nhỏ nhất là 1 (tham số tên của chương trình)
Tham số argv là một con trỏ chỉ đến một mảng của các con trỏ
kiểu ký tự. Mỗi con trỏ trong mảng chỉ dến một chuỗi chứa một
tham số dòng lệnh. Tên của chương trình được trỏ bởi argv[0],
argv[1] chỉ đến tham số thứ nhất và argv[2] chỉ đến tham số thứ
2,...
Tất cả các tham số dòng lệnh được chuyển vào chương trình
dưới dạng chuỗi, như vậy các tham số là con số sẽ phải được
chuyển đổi bên trong chương trình.
#include
using namespace std;
int main(int argc, char *argv[])
{
if(argc!=2) {
cout << "You forgot to type your name.\n";
return 1;
}
cout << "Hello " << argv[1] << '\n';
return 0;
}
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
double a, b;
if(argc!=3) {
cout << "Usage: add num num\n";
return 1;
}
a = atof(argv[1]);
b = atof(argv[2]);
cout << a + b;
return 0;
}
Câu lệnh return
Có hai hoạt động quan trọng:
Khiến cho thực thi trong một hàm quay về
chương trình gọi nó ngay tức thời
Có thể được dùng để trả về một giá trị
ví dụ
#include
using namespace std;
int find_substr(char *sub, char *str);
int main()
{
int index;
index = find_substr("three", "one two three four");
cout << "Index của three là " << index; // index là 8
return 0;
}
int find_substr(char
*sub, char *str)
{
int t;
char *p, *p2;
for(t=0; str[t]; t++) {
p = &str[t];
p2 = sub;
while(*p2 && *p2==*p) {
p++;
p2++;
}
if(!*p2) return t; // return
index
}
return -1; // không có
}