- from alpha to omega 4 Trả về giá trị của hàm (returning value from functions)
2. Mảng hai chiều (two-dimension array)
Mảng hai chiều thực chất là “mảng một chiều của các mảng một chiều”. Để khai báo mảng một chiều ta dùng cú pháp sau.
C++ Code:
Lựa chọn code | Ẩn/Hiện code
<kiểu_sữ_liệu> <tên_mảng>[chiều_1][chiều_2]; Ví dụ:
int x[10][8]; // khai báo một mảng nguyên 10 phần tử, mỗi phần tử là một mảng nguyên tám phần tử
Ta có thể coi mảng hai chiều như một bảng (table), chiều thứ nhất là số hàng (row), chiều thứ hai là số cột (column), như mô tả trong hình vẽ sau.
Mỗi phần tử lại là một mảng một chiều gồm 5 phần tử như hình vẽ sau.
Ta cũng có thể khởi tạo mảng hai chiều khi khai báo. Chiều thứ nhất có thể bỏ trống, trình biên dịch sẽ tự động tính toán vừa đủ, nhưng chiều thứ hai phải được chỉ định rõ. Ví dụ. C++ Code:
Lựa chọn code | Ẩn/Hiện code
int a[][2]={ {1,2}, {3,4}, {2,6} };
Cách viết trên để cho dễ nhìn, bạn cũng có thể viết như sau mà kết quả vẫn tương đương. C++ Code:
Lựa chọn code | Ẩn/Hiện code
a[][2]={1,2,3,4,2,6};
Hết bài 11
__________________
Vấn đề không phải là bước nhanh, mà là luôn luôn bước luôn bước
Đã được chỉnh sửa lần cuối bởi first_pace : 08-03-2011 lúc 03:24 PM.
#17
first_pace Thành viên chính thức Thành viên chính thức Ngày gia nhập: 02 2011 Nơi ở: Hà Nội Bài viết: 67 Lớp lưu trữ
BÀI 12. LỚP LƯU TRỮ (STORAGE CLASS)
C++ có 5 định danh lớp lưu trữ (storage class specifiers), đó là: auto, extern, static,
register và mutable. Các specifiers này quy định cách thức mà biến được lưu trữ. Specifier mutable chỉ áp dụng trong các đối tượng của lớp (class objects) nên mình sẽ đề cập đến nó trong những phần sau. Bây giờ ta chỉ khảo sát 4 specifiers đầu tiên.
1. auto
auto dùng để khai báo các biến cục bộ. Cú pháp khai báo một biến là auto như sau: C++ Code:
Lựa chọn code | Ẩn/Hiện code
auto <kiểu_dữ_liệu> <tên_biến>;
Tuy nhiên khai báo auto hiếm khi được sử dụng vì mặc định các biến cục bộ là auto. Vì vậy những biến cục bộ như thế nào thì các biến auto như thế.
2. extern
Trong thực tế các chương trình thường có quy mô lớn. Vì vậy người ta thường phải chia chương trình thành các files riêng rẽ , nhỏ hơn. Khi có một thay đổi nhỏ nào đó xảy ra thì ta không phải compile lại cả chương trình mà chỉ cần compile lại những file có thay đổi. Trong một chương trình lớn bao gồm nhiều files, nếu chương trình có sử dụng biến toàn cục thì các files phải “biết” các biến toàn cục này. Tuy nhiên ta không thể khai báo lại các biến toàn cục trong từng file. Vì như vậy trình liên kết (linker) không biết link biến nào vì có nhiều bản sao của biến toàn cục và sẽ báo lỗi. C++ cung cấp giải pháp đó là khai báo biến toàn cục trong một file và sử dụng từ khóa extern.
(name) của biến toàn cục, nhưng thực sự cấp phát bộ nhớ cho biến, tức là không thực sự tạo ra biến. Ta sẽ khai báo nó ở đâu đó trrong chương trình và mỗi khi gặp biến này, linker tự động tìm đến biến “thực sự” để lấy dữ liệu. Ví dụ chương trình của chúng ta gồm hai files là fileA, fileB và được khai báo như sau:
C++ Code:
Lựa chọn code | Ẩn/Hiện code
File A:
double global_var; // biến toàn cục thực sự
int main(){
// thân hàm main
}
File B:
extern double global_var; // thông báo global_var đã được khai báo trong một file nào đó
demo_func(){
// thân hàm demo_func
}
Một ứng dụng khác của extern đó là giúp ta có thể sử dụng biến toàn cục trước khi định nghĩa chúng. Thông thường ta thường khai báo các biến toàn cục ở đầu chương trình, nhưng điều này là không cần thiết. Khi một hàm nào đó cần sử dụng biến toàn cục, ta có thể khai báo biến toàn cục trong hàm với từ khóa extern, rồi sau đó thích đặt biến toàn cục ở đâu cũng được. Ví dụ chương trình sau:
C++ Code:
Lựa chọn code | Ẩn/Hiện code
int main(){
// thân hàm main
}
void func(){
extern int x; // khai báo extern
cout << “ x is global variable and x= ” << x << endl; }
// định nghĩa biến toàn cục cuối chương trình
int x=100;
Nói túm lại có hai cách sử dụng của extern: thứ nhất, dùng để thông báo biến toàn cục đã được định nghĩa trong một file nào đó của một chương trình nhiều files. Thứ hai,cho phép sử dụng biến trước khi định nghĩa chính thức cho biến.
Tuy nhiên có một điều cần chú ý. Nếu trong khai báo extern ta khởi tạo giá trị cho biến thì khai báo (declaration) đó sẽ trở thành định nghĩa (definition). Khai báo extern thì có thể có nhiều, nhưng định nghĩa thì chỉ có một nên sẽ có thể dẫn đến lỗi. Vì vậy khi sử dụng cần
phải chú ý.
3. static
Các biến có kiểu static là các biến “tĩnh” hay “cố định” (permanent) bên trong phạm vi khai báo của nó. Nó giống biến toàn cục ở chỗ nó được cấp phát bộ nhớ ngay khi chương trình bắt đầu, và tồn tại cho đến khi chương trình kết thúc, và nó duy trì giá trị trong suốt thời gian thực thi chương trình. Tuy nhiên điểm khác biệt là nó là biến cục bộ (local). Nó chỉ được biết đến trong phạm vi hàm, hoặc file mà nó được khai báo trong khi biến toàn cục có phạm vi toàn bộ chương trình. Có hai loại biến static là static cục bộ và static toàn cục, ta sẽ xem xét cả hai loại biến này.