簡體   English   中英

C ++全局和局部變量

[英]C++ global and local variables

我遇到了以下代碼:

#include<iostream>
using namespace std;
int i = 1;
int main(int argc,char ** argv)
{
    int i = i;
    cout<<i<<endl; // which i?
    return 0;
}

它可以通過編譯,但是給出錯誤的答案,這怎么解釋?

int i = i; main()語句聲明了一個隱藏全局變量的局部變量。

它使用自身(具有不確定的值)進行初始化。 因此, i根本就不使用全局。

Local變量是可訪問的,類似於呼叫兩個具有相同名稱的人,一個在房間內,一個在房間外。 您正在嘗試訪問的范圍內的人聽到了它。

最內部作用域中的變量將覆蓋具有相同名稱的變量,而不會發出警告。

較深作用域中的變量將覆蓋較高作用域中具有相同名稱的變量。 要訪問全局變量,請在名稱前加上::

int main()
{
    int i=i;
    return 0;
}

是正確的。

因此,在您的程序中,當遇到局部i並將其初始化為自身時,將忽略全局i 結果,您將獲得一個垃圾值。

當您有兩個同名變量時,一個是全局變量,另一個是局部變量。 然后,在這種情況下,局部變量將僅在該特定范圍內使用。 全局變量未使用。

現在,解決您的問題

#include<iostream>
using namespace std;
int i = 1;//Global Variable decleration
int main(int argc,char ** argv)
{
    int i = i; // Local to main
    cout<<i<<endl; // which i?
    return 0;
}

int i = i; 編譯時沒有任何錯誤,但是當您運行該程序時,它將產生錯誤,因為local i值不確定。

在C ++中,如果您有一個具有相同名稱的局部變量,但必須使用范圍解析運算符:: ,則可以訪問全局變量::

換行:

int i = i;

int i = ::i;

該程序將編譯並運行

大多數答案所描述的概念稱為陰影

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM