結構體變量和結構體指針變量做爲函數參數傳遞的問題(主要是說指針的優勢)函數
推薦使用結構體指針變量做爲函數參數來傳遞。spa
對結構體的內容輸入輸出.net
/* 對結構體輸入輸出的案例 */ # include <stdio.h> # include <string.h> //爲須要調用的三個函數,設置前置聲明 void InputMember(struct student * pMem); void OutputOne(struct student * pMem); void OutputTwo(struct student pMem); //定義一個結構體 struct student { char name[30]; int age; float score; }; //這個分號不能省略 int main(void) { struct student member; /* 輸入函數,要想跨函數修改值的內容,必須傳遞指針 */ InputMember(&member); /* 輸出函數,傳遞指針輸出 */ OutputOne(&member); /* 輸出函數,傳遞內容輸出 */ OutputTwo(member); return 0; } /* 定義形參爲指針變量,能夠跨函數對變量修改 */ void InputMember(struct student * pMem) { strcpy(pMem->name,"張三"); pMem -> age = 23; pMem -> score = 89.5; } /* 經過接受指針的方式,進行輸出 */ void OutputOne(struct student * pMem) { printf("%s\n%d\n%f \n", pMem->name, pMem->age, pMem->score); } /* 經過賦值的方式進行輸出 之因此把這兩個函數放到一塊兒寫,主要是爲了區別: 傳遞指針 和 傳遞數據 的區別 */ void OutputTwo(struct student pMem) { printf("%s\n%d\n%f \n", pMem.name, pMem.age, pMem.score); } /* VC++6.0上運行的結果: ===================================== 張三 23 89.500000 張三 23 89.500000 ===================================== 結論: 輸入函數,必須使用指針操做。 輸出函數,傳遞指針和傳遞數值結果都是正確的。 但!是!對內存的消耗和執行效率上是不一樣的。 */
究竟是發送指針仍是發送內容指針
指針的優勢之一:code
快速的傳遞數據blog
耗用內存小 內存
執行速度快ci
假若有一個佔用100字節的類型,若是發送內存的話,在函數中也一樣須要開闢出100字節的內存,用於存放發送過來的值,這就消耗了內存。內存開闢出來以後,還要把這100字節的內容給拷貝到函數開闢的內存中,這就消耗了時間。既浪費了內存,又耗費了時間,so,仍是推薦使用傳遞指針的方式。get
這就是指針的優勢。博客
學PHP的小螞蟻 博客 http://my.oschina.net/woshixiaomayi/blog