C開發經驗

2021-10-05 10:26:58 字數 1144 閱讀 7932

1. 函式指標定義注意

iar中,函式指標引數如果為void,那麼定義函式指標和函式實體時也要寫上void,否則編譯會報錯。

2. 多檔案使用函式指標注意

對多個原始檔,如果a檔案要訪問b檔案的函式指標而呼叫b檔案中的函式,前提是b檔案的這個函式指標在b呼叫之前,要在a中定義和宣告,否則會出現系統卡死的問題,因為呼叫乙個未初始化的函式指標,系統不知道掉到**去了。也有個辦法就是呼叫的時候判斷是否為null。

還有就是在定義結構體時,全域性結構體初始化這個函式指標為null,其他檔案使用時判斷是否為null,或者全域性結構體中初始化這個函式指標其他檔案不管多早執行,都可以使用這個函式指標,因為已經在全域性結構體成員初始化時初始化過了,即編譯階段就初始化了。並不是執行的時候構造的。

3.  結構體實現物件導向層次結構程式設計

如果a.h中定義乙個結構體的某個成員型別為b.h中定義的結構體型別,即使a.h包含了b.h,編譯也不會通過,因為標頭檔案展開只會在.c原始檔中進行,不會在.**件中進行。兩個方法解決:

(1)方法一,把a.h定義的這個結構體放在a.c中定義,然後a.c中包含b.h,這樣這個結構體的那個成員的型別就可以使用b.h中定義的型別了。

(2)方法二,在a.h定義的結構體時,要使用另外.**件結構體型別的成員定義為void *型別,這樣在c檔案中初始化a.h的結構體時把這個void*指標指向b.h中結構體型別的實體,這樣也能編譯通過,也能實現目的。任何型別指標可以賦值給void*,但是void*型別要賦值給其他型別指標就需要強制轉換為其他型別才能賦值,有時候也不用強制轉換,比如int* = malloc(),系統可能會隱含轉換。

方法二一般在分層框架中用得比較多。

4. 定義乙個二維陣列,要想某個指標指向這個陣列,可以定義乙個二維陣列指標:

int a[5][6]

int(*p)[6]; //p是指向長度為6的陣列的指標

然後p=a,這樣訪問p就相當於訪問a了。

5. 關於結構記憶體占用位元組對齊--兩個原則

(1)結構體每個成員相對於結構體首位址的偏移量必須是成員本身占用記憶體的整數倍。

(2)結構體占用總記憶體大小為結構體最寬基本型別成員大小的整數倍。

c 開發經驗記錄

1 當建立乙個類驗證是否登陸時,其它頁面繼承該類時,出現錯誤。public class loinedpage system.web.ui.page public partial class logincheck loinedpage public void onlinecheck object se...

mysql開發經驗 MySql開發經驗

1 wait timeout 預設288800秒 8小時 jdbc連線池maxwait或者maxldeltime這兩個引數要小於這個值,否則,當你的連線長時間沒和資料庫互動,伺服器早就把你的連線斷開了,而你的連線池還認為是有效連線,除非你設定testonborrow或者設定testonreturn設...

mysql開發經驗 MySql開發經驗

1 wait timeout 預設288800秒 8小時 jdbc連線池maxwait或者maxldeltime這兩個引數要小於這個值,否則,當你的連線長時間沒和資料庫互動,伺服器早就把你的連線斷開了,而你的連線池還認為是有效連線,除非你設定testonborrow或者設定testonreturn設...