結構體的傳值方法一共有三種形式,通過傳遞結構體,傳遞指針,傳遞結構體自身參數。傳遞指針的方式與另外兩種方法最大的不同就是傳遞的實際上是結構體的地址,在傳值的過程中,指針需要進過初始化分配內存(也就是使用malloc()函數分配空間給指針)
來看看以下代碼:
有兩個點需要注意:
(1)在方法設置類型的時候 是一個struct Book 類型,同時還是一個指針的類型,可以說(struct Book && pointer類型)
(2)在代碼的32,33行處,聲明了一個struct Book &&pointer類型的時候,一定要對指針類型做一次內存分配
1 /* 2 *該實例程序用來顯示如何在方法體中傳遞結構體參數 3 該傳遞參數的方法是通過指針的形式對參數進行傳遞 4 getinfo()方法用於對結構體指針進行賦值操作 5 showinfo()方法用於對結構體進行輸出 6 */ 7 #include <stdio.h> 8 #include <stdlib.h> 9 #define MAX_SIZE 2 10 #define MAX_TITLE_SIZE 30 11 #define MAX_AUTHOR_SIZE 30 12 //構造一個Book 類型的結構體 13 /* 14 *title 為char類型 15 author char 類型 16 price float 類型 17 */ 18 struct Book 19 { 20 char title[MAX_TITLE_SIZE]; 21 char author[MAX_AUTHOR_SIZE]; 22 float price; 23 24 }; 25 /* 26 聲明getinfo() showinfo()方法 27 */ 28 struct Book * getinfo(struct Book *lib); 29 struct Book * showinfo(struct Book *lib); 30 int main() 31 { 32 struct Book *lib; 33 lib=(struct Book *)malloc(sizeof(struct Book)); 34 lib=getinfo(lib); 35 showinfo(lib); 36 return 0; 37 } 38 struct Book * getinfo(struct Book *lib) 39 { 40 printf("請輸入書名:\t"); 41 gets(lib->title); 42 printf("請輸入作者名:\t"); 43 gets(lib->author); 44 printf("請輸入書的價格:\t"); 45 scanf("%f",&(lib->price)); 46 return lib; 47 } 48 struct Book * showinfo(struct Book *lib) 49 { 50 printf("the title is %s \t and the author is %s \t and the price is %f ", 51 lib->title,lib->author,lib->price); 52 }
運行結果為: