Ai đó có thể giải thích chính xác khái niệm phạm vi và tuổi thọ của biến trong C. Có khác biệt trong C++ không? Tôi đang bối rối giữa phạm vi và cuộc sống.Phạm vi và thời gian biến đổi trong C
Trả lời
Phạm vi là khu vực có thể truy cập biến.
Thời gian sống là khoảng thời gian trong đó một đối tượng vẫn hợp lệ.
Một ví dụ đơn giản:
#include <iostream.h>
void doSomething()
{
x = 5; //Error! Not Accessible
}
int main()
{
int x = 4;
std::cout<< x << endl;
{
int x = 2;
cout << x << endl;
}
doSomething();
std::cout<< x << endl;
return 0;
}
Trên đây đưa ra kết quả:
Trong chương trình trên,
đời của biến x = 4
là t hroughout chính, tức là: Nó vẫn còn sống trong suốt quá trình thực hiện chính, Ngoài ra nó có thể truy cập trong chính, đó là phạm vi của nó. Lưu ý rằng nó không thể truy cập được trong hàm vì nó nằm ngoài phạm vi của biến số x
.
trong khi phạm vi và tuổi thọ của biến x = 2
nằm trong dấu ngoặc ôm kèm theo {
}
bên trong chính.
hiện "vẫn còn hiệu lực" có nghĩa là "đang sử dụng"? Làm thế nào để nó tạo sự khác biệt với phạm vi biến? –
@ R.MartinhoFernandes: cũng không sai khi nói về vòng đời của một biến, vì biến là một đối tượng. như tôi nhớ lại tiêu chuẩn định nghĩa một biến như một đối tượng được đặt tên. Tuy nhiên, tôi có lẽ không có ý nghĩa bây giờ, và có lẽ đó là vì một số sửa đổi lịch sử SO loại bỏ bối cảnh ban đầu của nhận xét của bạn? –
Theo dõi nhận xét của Alf: một biến là một liên kết của một biểu tượng (tên) và một đối tượng. Trọn đời liên quan đến đối tượng (và chỉ đối tượng); phạm vi liên quan đến biểu tượng (và chỉ có biểu tượng). –
"Phạm vi" của biến là một vùng mã nguồn, nơi bạn có thể tham chiếu đến biến đó.
"Thời gian tồn tại" là thời gian tồn tại trong quá trình thực thi chương trình.
Bởi mặc định thời gian tồn tại của một biến địa phương cũng giống như phạm vi của nó:
void foo()
{
int x = 123;
cout << x << endl;
x += 1;
}
int main(){ foo(); foo(); foo(); }
Ở đây, mỗi lần foo
được gọi là mới x
được tạo ra (không gian được dành riêng cho nó trên stack), và khi thực hiện rời khỏi khối nơi x
được khai báo, x
bị hủy (trong đó int
chỉ có nghĩa là không gian đã được đặt trước, bây giờ được giải phóng để tái sử dụng).
Ngược lại:
void foo()
{
static int x = 123;
cout << x << endl;
x += 1;
}
int main(){ foo(); foo(); foo(); }
Ở đây, kể từ khi được khai báo x
static
, không gian được dành riêng cho x
trước khi thực hiện chương trình thậm chí bắt đầu. x
có vị trí cố định trong bộ nhớ, đây là biến số tĩnh . Và C++ có các quy tắc đặc biệt về việc khởi tạo biến như vậy: nó xảy ra lần đầu tiên việc thực thi đi qua khai báo.
Do đó, trong lần gọi đầu tiên foo
, x
được khởi tạo, báo cáo đầu ra hiển thị 123 và gia tăng tăng giá trị bằng 1. Trong lần gọi tiếp theo, việc khởi tạo bị bỏ qua (nó đã được thực hiện), giá trị 124 là đầu ra, và giá trị được tăng lên một lần nữa. Sớm.
Tuổi thọ của x
này bắt đầu từ khi bắt đầu thực hiện đến khi kết thúc thực hiện.
Phạm vi của biến số được xác định tại thời gian biên dịch. Đây là khu vực trong chương trình mà cùng một đối tượng được xác định thông qua định nghĩa có thể truy cập thông qua mã định danh đó.
Tuổi thọ của đối tượng là tính năng được xác định khi chạy, thông qua luồng thực thi. Một đối tượng có thể được truy cập thông qua một con trỏ ngay cả khi biến mà nó được xác định không nằm trong phạm vi.
void f(char *a) {
*a = 'f';
}
void g(void) {
char aChar = ' ';
f(&aChar);
}
Ở đây phạm vi biến aChar
(số nhận dạng) là nội dung của g
. Trong khi thực thi g
, thời gian tồn tại của đối tượng mở rộng đến việc thực thi f
. Sử dụng số nhận dạng aChar
bên trong f
sẽ là bất hợp pháp, trình biên dịch sẽ cho bạn biết điều gì đó như "không xác định số aChar
trong hàm f
". Sử dụng một con trỏ đến đối tượng đó như đã hoàn thành ở trên là hoàn toàn hợp pháp.
Phạm vi của biến số đề cập đến mức độ các phần khác nhau của chương trình có quyền truy cập vào biến. Các biến có thể được khai báo là:
Bên trong một hàm được gọi là biến cục bộ hoặc biến nội bộ.
Bên ngoài tất cả các chức năng được gọi là biến toàn cầu hoặc biến bên ngoài và tuổi thọ hoặc "mức độ" mở rộng trên toàn bộ quá trình chạy của chương trình.
Dưới đây là hướng dẫn chi tiết về biến với các ví dụ: What is variable in C
Và điều gì về phạm vi so với cuộc sống cho mỗi câu hỏi? Phạm vi – J0e3gan
- xác định phần nào của chương trình có thể truy cập vào vòng đời biến - xác định khi biến được tạo và hủy –
- 1. Phạm vi biến trong C++
- 2. Cuộc sống Phạm vi tạm thời biến
- 3. Sự nhầm lẫn phạm vi biến đổi trong C#
- 4. Phạm vi biến đổi trong dưa chuột
- 5. Phạm vi biến đổi trong Stylus
- 6. Phạm vi biến đổi và Thử bắt trong python
- 7. Phạm vi chênh lệch biến đổi giữa PHP và C: phạm vi khối không chính xác giống nhau?
- 8. Phạm vi hợp nhất trong khoảng thời gian
- 9. python biến phạm vi
- 10. Chuyển đổi Java: khai báo biến và phạm vi
- 11. Phạm vi biến trong trang aspx
- 12. C++ Phạm vi biến thành viên tĩnh
- 13. C# biến phạm vi không nhất quán?
- 14. Thời gian hoạt động của Autofac và Nhà cung cấp mặc định trong Phạm vi thời gian phù hợp
- 15. Lambda biến phạm vi
- 16. Angular JS tuyên truyền biến phạm vi con thay đổi thành phạm vi cha mẹ
- 17. Chuỗi bất biến trong CPython vi phạm
- 18. Dấu thời gian của MySQL chọn phạm vi ngày
- 19. Cần trợ giúp với phạm vi biến đổi trong Javascript
- 20. Twitter API tweets cho phạm vi thời gian
- 21. Phạm vi của biến lambda trong C# là gì?
- 22. Biến phạm vi vấn đề
- 23. Coffeescript/Javascript biến phạm vi
- 24. Đóng và phạm vi động?
- 25. Giới hạn phạm vi biến
- 26. Phạm vi biến trong các hàm VBScript
- 27. Câu hỏi phạm vi biến cục bộ
- 28. phạm vi biến cmake, add_subdirectory
- 29. coldfusion CFM Biến phạm vi
- 30. Phạm vi Bảng tạm thời?
Làm thế nào để acept câu trả lời? – vikky