**在函式體中使用結構體** 我們應該知道將結構體傳遞給函式有三種方式:
傳遞結構體的個別成員。
傳遞整個結構體。
傳遞乙個指向結構體的指標。
當結構體或者結構體的個別成員被傳遞給乙個函式時,它們是按值傳遞的。因此,主調函式中的結構體成員不會被被調函式所修改。按引用來傳遞乙個結構體,實際上是將結構體變數的位址傳遞過去。與其他陣列一樣,結構體陣列自動地以按引用的方式傳遞。
而往往我們會誤以為結構體跟陣列一樣,都是自動以按引用方式從主調函式傳遞給被調函式,從而試圖在被調函式中修改主調函式中結構體的數值,這是乙個邏輯錯誤。
還有我們應該要注意的一點就是:在傳遞乙個結構體時,採用傳位址的方式比採用傳值的方式效率更高(因為傳值要求複製整個結構體)。
在結構體使用的同時,我們也要了解對關鍵字typedef的使用,關鍵字ypedef提供了一種為已定義好的資料型別建立同義詞(或別命)的機制。為了建立更簡短的型別名,通常使用typedef來為結構體型別起名字。
例如:typedef struct ** card card; 就為結構體型別
struct card 定義了乙個同義詞card作為該型別的新名字。c程式設計師常常直接使用typedef來定義結構體型別,這樣就不在需要結構體標記了。例如:
typedef struct card;
就直接建立了乙個結構體型別,而無需再另外編寫一條單獨的typedef語句。
需要注意的是:將typedef定義的型別名的第乙個字母大寫,以強調它們是其它型別名的同義詞。
結構體傳參方法
1.將結構體變數作為引數傳入函式 2.將結構體指標作為引數傳入函式 include include typedef struct test 定義乙個結構體 test void print1 test s 定義乙個函式,將結構體變數作為引數傳入函式 printf n printf d s.a void...
語法tips 3(結構體傳參)
1 如何讓系統自動告知你資料型別 假設有如下資料型別 define num of sg 4 define sg num 2 struct oop setting group unit int main 編譯時告警如下 test.c 12 10 warning format d expects arg...
有關C 結構體定義和傳參的一些問題
在做廣義表的題目時,在結構體的定義和傳參上出了一些問題,導致後續廣義表的實現上出錯,然後用了乙個下午修bug。在此記錄一下收穫。使用typedef定義typedef struct glnode ptr glist glist a a是乙個指標!這種寫法可以理解為給結構體取了乙個別名。資料結構書上基本...