http://en.cppreference.com/w/cpp/language/storage_duration未初始化的變量 - 它傳遞給一個函數
Static local variables
Static variables declared at block scope are initialized the first time control passes through their declaration (unless their initialization is zero- or constant-initialization, which can be performed before the block is first entered). On all further calls, the declaration is skipped.
什麼是「靜態」在這句話的含義?它是:
static storage duration. The storage for the object is allocated when the program begins and deallocated when the program ends.
如果是這樣的話,那並不能說明什麼,在初始化方面main
或任何其他功能發生int k;
,因爲k
不是一個靜態變量(它不會分配時程序結束時程序開始並解除分配 - 等待一秒鐘,您可能會說程序開始時main
函數開始運行,程序結束時返回,但這不是我想到的)。
在主函數:
int k;
k++;
導致錯誤:uninitialized local variable 'k' used
。
因此,如果k
以上不是一個靜態局部變量,你能舉一個這樣的變量的例子嗎?
誰能告訴我爲什麼下面的代碼編譯和運行沒有任何問題,即使k
未初始化?
由於沒有身體的功能:
void foo(int* number) { }
,並要求它像這樣在main
:
int k;
foo(&k);
k++;
現在編譯並沒有問題運行,但k
值爲-858993459 。編譯器不喜歡我試圖在沒有啓動的情況下增加它,但將它傳遞給foo
導致編譯器忘記了它。爲什麼?
下流者,小心解釋原因? – user5539357
一個程序在調用'main'之前開始,在'main'返回之後結束。局部變量具有自動存儲持續時間,除非您使用'static'指定靜態持續時間,例如'static int k;' – molbdnilo