![](https://img.51dongshi.com/20250108/wz/18396611952.jpg)
C語言中未初始化的堆或棧變量在打印時會顯示特定的字符。比如,在一個簡單的程序中,可以觀察到這一現象。程序如下:#include void main() { char s[10]; //棧 printf("%s\n", s); char ch = 'a'; char* p = (char*)malloc(sizeof(char) * 10); //堆 printf("%s\n", p);}s是一個數組,屬于棧內存。未初始化的棧內存打印出的是“燙”,并且內存值是0xCC,0xCD。而p是一個動態分配的內存,屬于堆,未初始化的堆內存打印出的是“屯”,并且內存值是0xCD,0xCC。當程序運行時,未初始化的棧內存s會顯示出“燙”,這是因為未初始化的棧內存通常會被填充為0xCC,而在打印時會轉換成字符“燙”。同樣地,未初始化的堆內存p顯示出“屯”,因為未使用的堆內存通常被填充為0xCD,在打印時會轉換成字符“屯”。這些值是編譯器和系統默認的內存填充值,用來幫助調試和確保內存安全。通過觀察這些打印輸出,程序員可以了解內存的狀態,從而更好地進行調試和錯誤排查。此外,這些默認值還幫助開發者避免使用未初始化的內存,因為直接使用這些內存會導致不可預測的行為。值得注意的是,雖然這些默認值有助于調試,但它們并不保證始終如一。不同的編譯器和系統可能會使用不同的默認值。因此,在正式發布代碼之前,建議對所有未初始化的內存進行適當的初始化,以確保程序的穩定性和可預測性。綜上所述,未初始化的棧內存s和堆內存p在打印時顯示出的“燙”和“屯”是由于內存填充值0xCC和0xCD在打印時的字符表示。這為程序員提供了有用的調試信息,但也提醒我們在編寫代碼時要確保所有內存都被正確初始化。