簡體   English   中英

非靜態變量初始化

[英]Non-static variable initialization

我正在讀一本關於C progaming faq的書。 這是本書的篇章

自動變量是在沒有static關鍵字的函數或代碼塊內定義的變量。 如果未顯式初始化這些變量,則這些變量具有未定義的值。 如果未初始化自動變量,則必須確保在使用該值之前將其分配給它。

這是我的代碼:

#include <stdio.h>
int main (int argc, const char * argv[])
{    
    {
        int x;
        printf("%d", x);
    }
}

printf的結果為0.為什么變量初始化?

對於靜態和全局變量,它為0; 默認情況下不會初始化自動變量。

在c語言中,非靜態局部變量沒有默認值。 變量在成為變量之前保存內存中的內容。 最好在使用c語言之前始終初始化非靜態局部變量(或者至少在將其與其他東西進行比較之前)。 此外,最好假設沒有默認值,因為這會因語言和硬件而異。

閱讀更多: http//wiki.answers.com/Q/What_is_the_default_value_of_integer_in_c#ixzz1iaij7hRK

它沒有初始化。 x占用的內存單元仍具有早期使用的值。 但是, x的值可能是任何值,因此您不能依賴它。

未定義意味着它可以是任何東西,甚至是0.另一個實現可能具有不同的或隨機的值。 沒有辦法知道,你也不能相信它在每次執行時都是一樣的。

有些編譯器會為你做默認初始化,有些則不會。 你不應該指望他們。 這條線說

int x;

應該說

int x = 0;

如果那是你想要的。 對於某些C編譯器,調用printf時x可能是-23157263。

如果未顯式初始化,則automatic變量的初始值是不確定的。

Indeterminate意味着未指定(可能是0或42)或陷阱表示。 陷阱意味着讀取未初始化的變量未定義行為(例如,使程序崩潰)。

因為在放置x的存儲空間中已經有0,但這只是“運氣”,那個地方可能有任何數字或符號。 因此,為了確保始終獲得相同的結果,您應該始終初始化變量。

我記得在使用調試標志編譯代碼時,Visual Studio會(並且可能仍然)將自動變量設置為0或null。 像其他人所說,你當然不應該指望任何默認值。

暫無
暫無

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

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