科銳課堂筆記 2017 3 6 一維陣列與多維陣列

2021-07-27 23:59:22 字數 893 閱讀 3282

棧溢位錯誤碼是0xc00000fd,造成棧溢的原因是遞迴次數過多,函式的引數及儲存現場資訊是存放在棧裡的,這部分內容將棧佔滿了。大部分0xc00000fd的異常是由於遞迴函式的設計問題引起的,沒有設定返回條件判斷(或漏了一些)從而造成遞迴死迴圈。vc6預設的棧大小是1m,有時候確實因為計算量大遞迴次數過多,預設棧不夠用的話,可以用linker引數「/stack:0***xx,0***xx」指定棧大小,前乙個是保留的棧大小,後乙個是提交的棧大小。(在32位平台上最終都會以4位元組對齊)

減少給呼叫者(理解成匯出吧)函式引數的方法,可將函式定義為乙個**函式,**函式將呼叫真正的內層函式完成功能,這樣做的好處在設計上使用了分層,引數的檢查、轉換、傳遞可由外部**函式實現,內部函式只需完成功能**。

陣列是同型別資料的集合,在一次編譯的語言中(如c/c++),陣列的長度定義必須是常量或常量表示式(能在編譯前計算出),且陣列的賦值只能在定義時,賦值陣列的內容可以是常量、變數或函式等。(因為賦值動作是執行時完成的)

線性是邏輯概念,連續是物理描述。

陣列換算公式:首位址(指標)+下標(整型)*sizeof(陣列型別)。

舉例有int a[5] = :

那麼a[2]等同於2[a],在c語言中執行符,接受乙個指標與乙個整型,前後順序無關,所以a[2]和2[a]都會轉換成上面的公式,算出的位址值是一樣的,取值結果都是3。

類似的二維陣列被轉換成:首位址(指標)+下標1(整型)*sizeof(陣列型別[定義的第二維的元素個數])+下標2(整型)*sizeof(陣列型別)。如有乙個int a[3][5];可知a[1][2]=1[a][2],但不等於1[2][a],編譯器是一級一級運算的,先算1[2],發現兩個都是整型便會報錯了。

其實二維、多維本質上都可以看成一維陣列,多維陣列只是在邏輯上的概念讓人們更容易理解與記憶,在記憶體中都是以一維陣列的形式儲存的。

科銳課堂筆記 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 3 17 結構體

結構體是不同資料 包括型別或邏輯意義 的集合。在設計定義乙個結構體時,要把其合理的資料組織在一塊。點 運算子用來訪問結構體成員,點運算子優先順序僅次於括號。vc6中預設的編譯選項,結構體成員對齊為8位元組 zp8 結構體成員的偏移位址規則是,必須是結構體成員對齊位元組數 zp?和該成員型別長度 字串...

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

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