結構體、結構體指標作為函式的引數現在應用的非常廣泛,但一些細微之處還需要引起注意。本文將討論其作為形參和實參的區別。
將結構體作為函式的引數,目的是通過
makeinfo()
函式呼叫去改變
person
結構體中
letters
的值。
情形1:
#include
#include
struct namect;
struct namect getinfo(void);
struct namect makeinfo(struct namect);
void showinfo(struct namect);
int main(void)
struct namect getinfo(void)
struct namect makeinfo(struct namect info)
void showinfo (struct namect info)
程式的執行結果圖如下:
情形2:
如果將person=makeinfo(person)
改為makeinfo(person),
則執行結果如下:
將結構體指標作為函式的引數,從而直接去改變
letters
#include
#include
struct namect;
struct namect getinfo(void);
void makeinfo(struct namect *pst);
void showinfo(struct namect);
int main(void)
struct namect getinfo(void)
void makeinfo(struct namect *pst)
void showinfo (struct namect info)
程式執行結果如下:
在情形二與情形一比較,雖然表面上看起來情形二呼叫
makeinfo(person)
函式後,好像改變了
person
結構體中
letters
的值。但實質上呼叫
makeinfo(person)
函式中,結構體
person
只是作為乙個形式引數,函式會建立乙個新的結構體
**info
,person
中的值被複製到新的
info
結構體中,之後函式的所有處理過程都是針對這個
**info
結構體副本。自然而然得到的
letters
的值只是儲存在
info
中,而沒有存在
person
結構體中。這就是為什麼我們看到
letters
是乙個隨機值的原因。
結構體指標作為函式的引數,因為傳送的實質就是
person
結構體的位址,也就是
person
結構體本身。
makeinfo(&person)
函式呼叫,通過使用指標
pst定位把計算得到的值放在
person
結構體中,當然能改變其中
letters
的值。
我們可以用形參和實參來模擬理解,傳結構體相當於乙個形參(形式上的引數,只是起到乙個原件的作用,之後的處理都是針對其影印件而言,要想改變原件必須對原件進行賦值),傳結構體指標相當於乙個實參(實實在在的引數,一般是傳輸相關引數的位址值,改變都是對它本身而言)。
程式設計風格更加的直接、清晰。
由於其改變的是副本,所以比處理原始資料相比更加的安全。
只需要傳遞乙個單個位址即可;
處理資料更加的方便,效率較高。
但是兩者也有各自的缺點,結構作為引數有時候比較浪費空間和時間,結構體指標缺少對資料的保護。
通常,為追求效率常使用結構指標作為引數,當需要保護現場或者為發生某些不必要的意外時候使用
const
限制,傳遞結構值是處理小型結構經常用到的方法,通常傳遞指標或只將所需的成員作為引數傳遞。
結構體作為函式引數
c語言中結構體在函式中的應用 前兩天在編寫一段 時突然對結構體在函式中的用法有些模糊了,經過複習,基本弄清了這些知識,特總結如下 一 結構體與函式引數 結構体作函式引數可分為 傳值與傳指標。1 傳值時結構體引數會被拷貝乙份,在函式體內修改結構體引數成員的值實際上是修改呼叫引數的乙個臨時拷貝的成員的值...
結構體作為函式引數
結構體巨集觀上可以當做變數看待,可以作為函式引數,也可以作為函式返回值。再軟體程式設計上的使用,可以與c 的類,封裝的功能平分天下。將乙個結構體變數中的資料傳遞給另乙個函式,有下列 3種方法 用結構體變數名作引數。一般較少用這種方法。用指向結構體變數的指標作實參,將結構體變數的位址傳給形參。用結構體...
結構體和結構體指標作為引數傳遞
結構體作為引數傳遞 include includeusing namespace std 宣告結構體 struct namect 函式宣告必須提供資料型別,但是可以不傳引數 struct namect getinfo void 宣告函式的返回值是乙個結構體,引數型別也是結構體,這裡結構體作為引數值直...