1. 程式人生 > >今日刷題總結9

今日刷題總結9

程序 bool aid 二叉樹 在外 str 如果 inline 區分

數據存取路徑

數據存取是指數據庫數據存貯組織和存貯路徑的實現和維護。在計算機中,數據一般以文件形式保存或存放在數據庫中。在數據庫,數據存取路徑分為主存存取路徑與輔存存取路徑,前者主要用於主鍵檢索,後者用於輔助鍵檢索。在系統中,路徑一般分為相對路徑和絕對路徑。

數據存取路徑是指存取數據的位置,由於程序運行具有局部性,不可能把所有數據都調入內存,在內存中只有一部分數據,其余數據都在外存,因此數據存取路徑分為輔存存取路徑和內存存取路徑,不同的路徑,查找的方法是不同的,一般分為內存查找和輔存查找。

內存查找方法:順序查找、折半查找、二叉樹查找等。

輔存查找方法:B/B+樹查找、分塊查找、散列查找等。

具體參考https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%AD%98%E5%8F%96%E8%B7%AF%E5%BE%84/20956593?fr=aladdin

類型安全

類型安全就是說,同一段內存,在不同的地方,會被強制要求使用相同的辦法來解釋(interpret)。例如C++可以將0作為false,非零作為true。一個函數返回類型即使是bool,但是還是可以返回int類型的,並且自動將0轉換成false,非零轉換成true。所以說C++不是類型安全的。

C++提供了一些機制保障類型安全:

(1)操作符new返回的指針類型嚴格與對象匹配,而不是void*;

(2)C中很多以void*為參數的函數可以改寫為C++模板函數,而模板是支持類型檢查的;

(3)引入const關鍵字代替#define constants,它是有類型、有作用域的,而#define constants只是簡單的文本替換;

(4)一些#define宏可被改寫為inline函數,結合函數的重載,可在類型安全的前提下支持多種類型,當然改寫為模板也能保證類型安全;

(5)C++提供了dynamic_cast關鍵字,使得轉換過程更加安全,因為dynamic_cast比static_cast涉及更多具體的類型檢查。

即便如此,C++也不是絕對類型安全的編程語言。如果使用不得當,同樣無法保證類型安全。

結構體內存對齊規則

(1)數據成員對齊規則:結構(struct)(或聯合(union))的數據成員,第一個數據成員放在offset為0的地方,以後每個數據成員的對齊模數按照#pragma pack指定的數值(或默認值)和這個數據成員類型長度中較小的那個確定。在上一個對齊後的地方開始尋找能被當前對齊模數整除的地址。

(2)結構(或聯合)的對齊規則:在數據成員完成各自對齊之後,結構(或聯合)本身也要進行對齊.主要體現在最後一個元素對齊後,後面是否填補空字節,如果填補,填補多少.對齊模數將按照#pragma pack指定的數值(或默認值)和結構(或聯合)最大數據成員類型長度中較小的那個確定。

(3)結合1、2可知在#pragma pack的n值等於或超過所有數據成員類型長度的時候,這個n值的大小將不產生任何效果。

參考題型https://www.nowcoder.com/questionTerminal/29193a1acc4e4fd4b349a26e4ad78291

實型常量

實型常量又稱實數或浮點數。在C語言中可以用以下兩種形式表示一個實型常量。

小數形式:即一般形式的實數,由整數部分、小數點、小數部分組成,其中整數部分或小數部分可以省略其中一個。數的正負用前面的“+”(可以省略)號或“-”號來區分。

指數形式:即指數形式的實數,由尾數部分、字母(e或E)、指數部分組成,形式如“尾數e指數”。尾數部分可以是十進制整數或一般形式的十進制實數,指數部分是十進制的短整數(可以帶“+”號或“-”號)。數的正負用前面的“+”(可以省略)號或“-”號來區分。

一個實型常量可以賦給一個 float 型、double 型或 long double 變量。根據變量的類型截取實型常量中相應的有效位數字。

今日刷題總結9