有人能夠準確地解釋C中變量的範圍和生命的概念嗎?它在C++中有什麼不同?我對範圍和生活感到困惑。範圍與變量的生命期C
回答
作用域是變量可訪問的區域。
生命期是對象保持有效的時間跨度。
一個簡單的例子:
#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;
}
上面給出的輸出:
在上述程序中,
壽命可變x = 4
的是t遍歷主體,即:在整個主體執行過程中保持活動狀態,也可以在主體中訪問,也就是它的範圍。請注意,該功能無法訪問,因爲它超出了變量x
的範圍。
而範圍和變量x = 2
的使用壽命是在內部包圍括號{
}
。
「仍然有效」是指「使用中」?它如何影響變量的範圍? –
@ R.MartinhoFernandes:好吧,談論變量的生命週期並不正確,因爲變量是一個對象。我記得標準將變量定義爲命名對象。然而,我現在可能沒有意義,可能是因爲一些SO歷史修訂刪除了你的評論的原始上下文? –
繼續Alf的評論:一個變量是一個符號(名稱)和一個對象的關聯。生命週期涉及的對象(只有對象);範圍涉及的符號(只有符號)。 –
變量的「範圍」是源代碼的一個區域,您可以在其中引用該變量。
「生命期」是指程序執行過程中存在的時間。
通過默認的本地變量的生存期相同的範圍:
void foo()
{
int x = 123;
cout << x << endl;
x += 1;
}
int main(){ foo(); foo(); foo(); }
在這裏,每個時間foo
被稱爲新x
創建(空間保留給它在堆棧上),並當執行離開x
的塊時,x
被銷燬(int
只是意味着保留的空間現在被釋放以供再次使用)。
相反:
void foo()
{
static int x = 123;
cout << x << endl;
x += 1;
}
int main(){ foo(); foo(); foo(); }
這裏,因爲x
聲明static
,空間保留給x
程序執行,甚至開始之前。 x
在內存中有一個固定位置,它是一個靜態變量。而且C++對這樣一個變量的初始化有特殊的規則:它在執行首次通過聲明時發生。
因此,在第一次調用foo
時,此x
被初始化,輸出語句顯示123,並且增量將值增加1.在下一次調用中,跳過初始化(它已經執行),值124被輸出,並且該值再次增加。等等。
此x
的生存期從開始執行到結束執行。
在編譯時確定變量的範圍。這是程序中的區域,通過該標識符可以訪問,通過該標識符可以訪問相同的對象。
對象的生命週期是一個在運行時通過執行流定義的功能。即使通過指針定義的變量不在範圍內,也可以通過指針訪問對象。
void f(char *a) {
*a = 'f';
}
void g(void) {
char aChar = ' ';
f(&aChar);
}
這裏變量aChar
(標識符)的範圍的g
身體。執行g
期間,對象的生命週期擴展爲執行f
。使用標識aChar
內f
是不合法的,編譯器會告訴你什麼「未知indetifier aChar
在功能f
」。如上所述使用指向該對象的指針是完全合法的。
變量的範圍指的是程序的不同部分訪問變量的程度。 變量可以聲明爲:
裏面一個被稱爲局部變量和內部變量函數。
的被稱爲全局變量或外部變量和壽命或「範圍」的所有功能之外整個計劃的整個行程上延伸。
下面是有關變量的詳細教程,範例:What is variable in C
每個問題的範圍與生活情況如何? – J0e3gan
範圍 - 定義程序的哪些部分可以訪問變量生命週期 - 定義何時創建和銷燬變量 –
- 1. VBA 2關於變量範圍和生命週期的問題
- 2. StructureMap生命週期範圍
- 3. c變量範圍
- 4. C++變量範圍
- 5. 範圍變量和生命週期到帆控制器nodejs
- 6. C++對象生命範圍
- 7. C++的變量範圍
- 8. Unity3D C# - 範圍的變量
- 9. C#中的變量範圍
- 10. 變量範圍在C++
- 11. C++類變量範圍
- 12. 變量範圍在C#
- 13. C++變量範圍錯誤
- 14. 封閉本地範圍變量與全局範圍變量 - Python
- 15. global.asax範圍和生命週期澄清
- 16. Flash範圍變量變得過期
- 17. Perl的範圍和局部變量的生命
- 18. java程序沒有編譯,變量的範圍和生命期問題
- 19. POD堆棧變量的範圍和生命週期通過轉到它時
- 20. 類中生成器的變量範圍
- 21. 變量範圍
- 22. 變量範圍
- 23. 範圍變量
- 24. 變量範圍
- 25. 變量範圍
- 26. 變量範圍
- 27. 變量範圍
- 28. 變量範圍
- 29. 範圍的變量
- 30. C++的命名空間範圍的初始化變量
如何acept答案嗎? – vikky