結構體的傳參使用 定義

2021-10-09 19:18:32 字數 785 閱讀 8318

**在函式體中使用結構體**                            我們應該知道將結構體傳遞給函式有三種方式:

傳遞結構體的個別成員。

傳遞整個結構體。

傳遞乙個指向結構體的指標。

當結構體或者結構體的個別成員被傳遞給乙個函式時,它們是按值傳遞的。因此,主調函式中的結構體成員不會被被調函式所修改。按引用來傳遞乙個結構體,實際上是將結構體變數的位址傳遞過去。與其他陣列一樣,結構體陣列自動地以按引用的方式傳遞。

而往往我們會誤以為結構體跟陣列一樣,都是自動以按引用方式從主調函式傳遞給被調函式,從而試圖在被調函式中修改主調函式中結構體的數值,這是乙個邏輯錯誤。

還有我們應該要注意的一點就是:在傳遞乙個結構體時,採用傳位址的方式比採用傳值的方式效率更高(因為傳值要求複製整個結構體)。

在結構體使用的同時,我們也要了解對關鍵字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是乙個指標!這種寫法可以理解為給結構體取了乙個別名。資料結構書上基本...