30/09/2018, 20:09

Biến toàn cục và static

Cho mình hỏi là khi dùng static int d =15 thì nó lại hiện ra màng hình là 2
trong khi đó nếu mình không dùng static int mà chỉ viêt d =15 thôi thì màng hình lại hiện ra là 36
Vậy d khi khai báo static là biến d ảo còn ko có static thì nó chạy xuyên suốt luôn à?

Ngô Doãn Tuấn viết 22:16 ngày 30/09/2018

static int d =15;
thì compiler tự động tạo một vùng chứa độc lập cho d và gán trị 15 vào.
Khi chương trình chạy và hàm được gọi, hàm bỏ qua câu lệnh gán trên và tự động biết dùng địa chỉ vùng chứa để tìm d, không phải gán trị lại (d đã có trị rồi). Vì vậy, nếu trị được thay đổi trong hàm thì d luôn luôn giữ trị mới.
Khi compiler gặp:
int d=15;
thì compiler biết đây là biến auto. Vùng chứa cho d lúc này phụ thuộc vào hàm. Và d=15 là một lệnh gán mà hàm phải thi hành. Vì vậy, mỗi lần gọi hàm thì d lại được gán trị khởi đầu là 15.
Trong c++, Thì biến static còn được dùng trong class :

Một hàm thành viên static có thể được gọi ngay cả khi không có đối tượng nào của lớp tồn tại và các hàm static được truy cập chỉ bởi sử dụng tên lớp và toán tử phân giải phạm vi :: trong C++.

Bài liên quan
0