有些程式語言不一定需要程式設計師初始化變數(比如VB),因為如果你不初始化,那麼編譯器/直譯器會自動幫助你初始化(會將變數資料型別的預設初始值賦給變數)。即使是C語言這種,也有不需要初始化的變數,例如靜態變數static,規則如下:對於原生資料型別,以對應型別的零值進行初始化;對於類中的靜態物件,由其預設的建構函式來進行初始化。另外全域性變數,還有用calloc()函式分配到的空間,都會被自動初始化。所以題主你理解的變數必須要初始化其實只是由於在C或者類似語言中,區域性的自動變數和暫存器變數是從堆、棧或者暫存器上臨時分配(重複使用),我們不知道之前的程式碼究竟對這個空間做過什麼,所以值會是隨機的。除非編譯器設為除錯模式(debug),此時編譯器往往會自動對區域性變數進行初始化(0xcc),這也是有時除錯模式編譯執行成功但是發行模式(release)編譯執行出錯的原因。全域性變數和靜態變數之所以不需要初始化是因為,作用範圍為全域性的變數(包括全域性和靜態)會從全域性變數區分配空間,而由於RAM儲存器特性,這些變數會被自動清零。
有些程式語言不一定需要程式設計師初始化變數(比如VB),因為如果你不初始化,那麼編譯器/直譯器會自動幫助你初始化(會將變數資料型別的預設初始值賦給變數)。即使是C語言這種,也有不需要初始化的變數,例如靜態變數static,規則如下:對於原生資料型別,以對應型別的零值進行初始化;對於類中的靜態物件,由其預設的建構函式來進行初始化。另外全域性變數,還有用calloc()函式分配到的空間,都會被自動初始化。所以題主你理解的變數必須要初始化其實只是由於在C或者類似語言中,區域性的自動變數和暫存器變數是從堆、棧或者暫存器上臨時分配(重複使用),我們不知道之前的程式碼究竟對這個空間做過什麼,所以值會是隨機的。除非編譯器設為除錯模式(debug),此時編譯器往往會自動對區域性變數進行初始化(0xcc),這也是有時除錯模式編譯執行成功但是發行模式(release)編譯執行出錯的原因。全域性變數和靜態變數之所以不需要初始化是因為,作用範圍為全域性的變數(包括全域性和靜態)會從全域性變數區分配空間,而由於RAM儲存器特性,這些變數會被自動清零。