當前位置:首頁 » 編程軟體 » 編譯器會自動為它賦初值

編譯器會自動為它賦初值

發布時間: 2024-10-09 11:42:28

⑴ C語言指針變數為什麼要賦初值

因為指針不初始賦值的話會隨機分配一個內存地址,如果後面的代碼直接使用的話會出錯,C編譯器為了不讓這種情況發生所以去檢測有沒有不初始化的指針,其實就是編譯器搞得鬼。

⑵ C語言中變數初始化與賦初值有什麼不同

所謂初始化,就是指系統(程序)起始狀態時,各種參數(變數)應該取什麼樣的值,因為系統在reset時,漏瞎內存數據可能不定,所以需要在程序開始時進行初始化(變數賦值,控制寄存器賦值配置等)。
賦初值一般指定義一個變數的同時就賦值。
其實,「變數初始化」和「賦初值」只是2種說法,目的都差不多,不必太「糾結」這兩個詞。
下面是一個mainLoop的結構,當然也可以不用Loop,具體根據你的程序用處決定

/*一般需要初始化的變數都是全局變數 定義變數var2 */
uint16 var2; /*此處var2,僅僅分配了內存空間2位元組,但是沒有賦初值,所以var2的具體值是多少不清楚,但是根據編譯器的不同有些編譯器會自動賦初值0或其他*/

void sysinit(void){
.......

var2 = 0; /* 根據要求對變數var2初始化*/
.......
}

main(){
uint16 var1=0; /*此處var1賦初值*/

sysinit(); /*此處可以對var2變數初始化賦值*/
for(;;){
task1();
.....
taskx();
}
}

剛剛看了「幻の上帝」的回答,似乎也沒能說清「初始化」和「賦初值」的區別,只是用「微妙」形容了一下。
關於指出的2點錯誤,再此首先表示戚皮感謝,下面是我的答復:
1.指出「局部auto變數」在我上述論述中,首先並沒有提到。再者,「局部auto變數」本身的特性就是在函數調用時才臨時分配(一般分配在堆棧中),函數退出時釋放。所以,局部auto變數要在函數調用時才能被初始化,這個說法有點「說了也白說」的感覺。而且我也並沒有提到適用於「局部auto變數」。既然說到這里了,順便提一下慎用「static局部變數」,首先就是長期佔用(函返仔空數退出時也佔用,不釋放);其次,降低程序的可讀性(多次調用這個函數時,如果開始不對其賦初始值[有點廢話的感覺],那麼就往往弄不清static局部變數的值)。
2.既然我也提到了和編譯器有關,我也沒有說一定是0或不是0,只是要根據編譯器,目的是為了解釋為什麼要進行「初始化」的初衷,如果為了討論各種編譯器的標準的話,那我再此先謝謝你提供的消息,但是我覺得沒有必要去糾結這些標准,我們只要養成良好的編程習慣,記得定義完變數後,進行「賦初值」或「初始化」,就OK了,這樣就不會去爭論編譯器自動賦什麼初值。再者C編譯器也好C的標准也好,都也在不斷的更新。所以我認為我上面的說法也並沒有什麼錯誤。

熱點內容
演算法結合硬體 發布:2024-10-09 14:11:37 瀏覽:996
安卓驅動編譯進內核 發布:2024-10-09 13:59:30 瀏覽:600
ubuntunginx編譯 發布:2024-10-09 13:27:36 瀏覽:724
怎麼查伺服器ip段 發布:2024-10-09 13:08:04 瀏覽:151
ftpaws 發布:2024-10-09 12:53:20 瀏覽:272
生化危機5ftp 發布:2024-10-09 12:45:22 瀏覽:228
系統的安全配置有哪些 發布:2024-10-09 12:31:41 瀏覽:570
安卓馬桶蓋怎麼拆 發布:2024-10-09 12:19:00 瀏覽:222
移動硬碟文件夾消失 發布:2024-10-09 12:18:20 瀏覽:550
編譯器會自動為它賦初值 發布:2024-10-09 11:42:28 瀏覽:351