bool 變量爲什麼初始化爲FALSE
1:FLASE 的值大家都知道,在編譯器裏被定義爲0;但TRUE 的值呢?都是1嗎?很不幸,不都是1。Visual C++定義爲1,而它的同胞兄弟Visual Basic 就把TRUE 定義爲-1.那很顯然,這種寫法也不好。
2: 如果業務代碼出現異常(假設沒執行), 那麼fun函數的返回就是true了, 這樣調用者會被誤導。 相反, 如果初始化爲false, 如果業務代碼(假設沒執行), 那麼fun函數就會返回false, 這會引起調用者的注意。
這涉及到一個虛警和漏檢的概念, 虛警不可怕, 大不了虛驚一場。喊狼來啦, 哪怕是假的, 無非就是浪費功夫白白地多逃跑幾次而已。 但是, 漏檢就危險了, 最終會被狼吃掉的。
變量爲什麼要初始化
內存是在操作系統的統一管理下使用的!
1、軟件在運行前需向操作系統申請存儲空間,在內存空閒足夠時,操作系統將分配一段內存空間並將外存中軟件拷貝一份存入該內存空間中,並啓動該軟件的運行;
2、在軟件運行期間,該軟件所佔內存空間不再分配給其他軟件;
3、當軟件運行完畢後,操作系統將回收該內存空間(注意:操作系統並不清空該內存空間中遺留下來的數據),以便再次分配給其他軟件使用。
綜上所述,一個軟件所分配到的空間中極可能存在着以前其他軟件使用過後的殘留數據,這些數據被稱之爲垃圾數據。所以通常情況下我們爲一個變量,爲一個數組,分配好存儲空間之後都要對該內存空間初始化。
小知識:
初始化的全局變量 存放在 數據段
局部變量 存放在 棧
malloc函數分配的空間 來自於 堆
未初始化的全局變量 存放於 bss段
棧與堆
定義:
棧是一種運算受限的線性表,其限制是指只僅允許在表的一端進行插入和刪除操作,這一端被稱爲棧頂(Top),相對地,把另一端稱爲棧底(Bottom)。
堆是一種常用的樹形結構,是一種特殊的完全二叉樹,當且僅當滿足所有節點的值總是不大於或不小於其父節點的值的完全二叉樹被稱之爲堆。堆的這一特性稱之爲堆序性。
主要區別:
棧由操作系統自動分配釋放 ,用於存放函數的參數值、局部變量等,其操作方式類似於數據結構中的棧。
堆由開發人員分配和釋放, 若開發人員不釋放,程序結束時由 OS 回收,分配方式類似於鏈表。