科銳課堂筆記 2017 3 17 結構體

2021-07-29 01:52:00 字數 751 閱讀 4461

結構體是不同資料(包括型別或邏輯意義)的集合。在設計定義乙個結構體時,要把其合理的資料組織在一塊。點(.)運算子用來訪問結構體成員,點運算子優先順序僅次於括號。

vc6中預設的編譯選項,結構體成員對齊為8位元組(/zp8)。結構體成員的偏移位址規則是,必須是結構體成員對齊位元組數(/zp?)和該成員型別長度(字串不計陣列長度,只作字元型別長度),這兩者較小者的整倍數。而結構體大小則是成員對齊字元數和結構體中最大成員型別長度,這兩者較小值的整倍數。比如在vc6預設選項中定義乙個結構體:

struct temp ;

sizeof(temp) 等於24。

結構體可以巢狀結構體,但不能是本身。

在原始碼中可以用#pragma指令動態修改結構體成員對齊位元組,比如:

#pragma pack(push) // 儲存之前成員對齊位元組數

#pragma pack(2) // 設定結構體成員對齊2位元組

// 定義結構體

#pragma pack(pop) // 恢復之前成員對齊位元組數

結構體點運算子公式:

obj.member = *(member type*)((int)&obj + member_offset)

可以定義乙個巨集獲取結構體的成員偏移量:

#define getoffset(obj,member) (size_t)&(((obj*)null)->member)

科銳課堂筆記 2017 2 28 迴圈相關

大數階乘演算法優化,例求10的階乘1 2 3 4 5 6 7 8 9 10可轉換成 1 3 5 7 9 2 4 6 8 10 1 3 5 7 9 1 2 3 4 5 2,即把乙個大數階乘轉換成若干小數階乘,乘多少次2可用左移指令完成,其中2 5可去掉,記住有多少次2 5結果末位就加上多少個0,這樣一...

科銳課堂筆記 2017 4 19 虛函式

我們知道c 是一門物件導向的語言,它有三大特性 封裝 繼承 多型。其中多型是最具有物件導向程式設計的特性。多型分靜態多型和動態多型。靜態多型也稱編譯時多型,指通過函式過載 運算子過載等,根據引數列表在編譯時刻確定呼叫函式。動態多型也叫執行時多型,是在執行時刻才確定呼叫的函式,執行時多型是通過類中的虛...

科銳課堂筆記 2017 2 23 浮點小數儲存格式

階乘100的解題思路用陣列存數模擬手工算乘法。結果值有150多位 遞迴比迴圈效率低多了,能不用就不用。線性問題優先使用迴圈。數字後加f表示單精度,不加雙精度 對小數而言 定點小數優點快速高效,但缺乏靈活性。單精度浮點小數儲存格式 共4位元組 如圖 這裡需要注意,指數部分存的是指轉換成二進位制下小數點...