我會復活此主題以添加重要觀點,因爲OP對術語的困惑是可以理解的。正如@OliCharlesworth所指出的(並且他完全正確),就C語言標準而言,初始化和賦值是兩個完全不同的東西。例如(假設本地範圍內):
int n = 1; // definition, declaration and **initialization**
int k; // just definition + declaration, but no initialization
n = 12; // assignment of a previously initialized variable
k = 42; // assignment of a previously UNinitialized variable
的問題是,教編程的很多書都沒有那麼挑剔術語,所以他們稱之爲「初始化」任何給一個變量的第一個有意義的價值「手術」 。因此,在上面的示例中,n = 12
不會是初始化,而k = 42
會。當然,這個術語是模糊的,不精確的,可能會引起誤解(儘管它經常被使用,特別是老師在向新手介紹程序時)。作爲這種不確定性的一個簡單的例子,讓我們改寫前面的例子中考慮全球範圍內考慮:
// global scope
int n = 1; // definition, declaration and **initialization**
int k; // definition, declaration and **implicit initialization to 0**
int main(void)
{
n = 12; // assignment of a previously initialized variable
k = 42; // assignment of a previously initialized variable
// ... other code ...
}
你會說什麼在main
的任務?第一個顯然只是一個任務,但是根據模糊的通用術語,它是第二次初始化嗎?默認值0
是否給k
第一個「有意義」的值?
此外,一個變量是通常說如果沒有初始化或分配已被應用到它未初始化。鑑於:
int x;
x = 42;
一會常用說x
被轉讓之前未初始化,而不是之後。術語賦值和初始化程序在語法上被定義,但是像「初始化」和「未初始化」的術語經常被用來指代語義(在某種非正式用法中)。 [感謝基思湯普森最後一段]。
我不喜歡這個模糊的術語,但應該意識到它被使用了,唉,不是很少見。
垃圾變量? – 2012-03-18 11:47:02
int b;只包含垃圾,就是我的意思。 – sabgenton 2012-03-18 12:17:28