一、結(jié)構(gòu)體變量做函數(shù)參數(shù),使用引用和不用引用的區(qū)別
引用實際上是變量別名。效果等同于操作原對象。不傳引用新建了一個Stack副本,副本指針的改變不影響原變量,里面的指針永遠指向最初的地址,導(dǎo)致每次只是把這塊內(nèi)存的值從a改到b而沒有實現(xiàn)自增。
結(jié)構(gòu)作為函數(shù)參數(shù)的三種傳遞方式
1.傳遞結(jié)構(gòu)成員
2.傳遞結(jié)構(gòu)
3.傳遞結(jié)構(gòu)的地址
===================================
//1.傳遞結(jié)構(gòu)成員
#include
#include
//花唄還款簡單舉例
struct account
{
??? char * bankName;??? //銀行名稱
??? char * userName;??? //用戶名稱
??? double limit;?????? //賬戶當(dāng)前可用額度
??? double max;???????? //賬戶總額度
};
//計算并返回當(dāng)月應(yīng)還款數(shù)
double payFor(double m1,double m2)
{
??? return m2-m1;
}
int main()
{
??? //初始化數(shù)據(jù)
??? struct account BOC;
??? BOC.bankName=”中國銀行”;
??? BOC.userName=”馬小云”;
??? BOC.max=10000;
??? BOC.limit=1562;
??? double result=payFor(BOC.limit,BOC.max);
??? printf(“用戶應(yīng)還款%.2lf元,截至下月9日之前不算利息!\n”,result);
}
//2.傳遞結(jié)構(gòu)
//結(jié)構(gòu)體定義不變,后面照下面修改
//計算并返回當(dāng)月應(yīng)還款數(shù)
double payFor(struct account accounts)
{
??? return accounts.max-accounts.limit;
}
int main()
{
??? //初始化數(shù)據(jù)
??? struct account BOC;
??? BOC.bankName=”中國銀行”;
??? BOC.userName=”馬小云”;
??? BOC.max=10000;
??? BOC.limit=1562;
??? double result=payFor(BOC);
??? printf(“用戶應(yīng)還款%.2lf元,截至下月9日之前不算利息!\n”,result);
}
//3.傳遞結(jié)構(gòu)的地址??
//計算并返回當(dāng)月應(yīng)還款數(shù)
double payFor(const struct account *accounts)??? //因為指針指向可以改變,所以此處加上const起保護作用。
{
??? return accounts->max-accounts->limit;
}
int main()
{
??? //初始化數(shù)據(jù)
??? struct account BOC;
??? BOC.bankName=”中國銀行”;
??? BOC.userName=”馬小云”;
??? BOC.max=10000;
??? BOC.limit=1562;
??? double result=payFor(&BOC);
??? printf(“用戶應(yīng)還款%.2lf元,截至下月9日之前不算利息!\n”,result);
}
延伸閱讀:
二、結(jié)構(gòu)體參數(shù)調(diào)用歸納
1)結(jié)構(gòu)體變量作為函數(shù)參數(shù)[實參與形參]時,形參結(jié)構(gòu)體變量成員值的改變不影響對應(yīng)的實參構(gòu)體變量成員值的改變。
2)結(jié)構(gòu)體數(shù)組或結(jié)構(gòu)體指針變量作為函數(shù)參數(shù)[實參與形參]時,形參結(jié)構(gòu)體數(shù)組元素[或形參結(jié)構(gòu)體指針變量指向的變量]成員值的改變將影響對應(yīng)的實參構(gòu)體數(shù)組[或?qū)崊⒔Y(jié)構(gòu)體指針變量指向的變量]成員值的改變。
3)結(jié)構(gòu)體變量可作為函數(shù)的參數(shù),函數(shù)可返回一結(jié)構(gòu)體類數(shù)據(jù)
4)p=&b; 使結(jié)構(gòu)體指針變量p指向結(jié)構(gòu)體變量b的空間。
p->num:表示通過指針變量引用結(jié)構(gòu)體變量b的成員num
5)p=a;或p=&a[0];將結(jié)構(gòu)體指針變量指向結(jié)構(gòu)體數(shù)組a。則:
①p->num:表示通過指針變量引用結(jié)構(gòu)體數(shù)組元素的成員num的值。
②p->num++:表示通過指針變量先引用結(jié)構(gòu)體數(shù)組元素的成員num的值,再使該元素的成員num的值加 1,先引用其值然后其加1。
③++p->num:表示使指向的元素的成員num的值加1,再引用其值。
6)p=a;或p=&a[0];表示將結(jié)構(gòu)體指針變量p指向結(jié)構(gòu)體數(shù)組a。
①(p++)->num:表示通過指針變量先引用結(jié)構(gòu)體數(shù)組元素? 的成員num的值,再使指針變量本身加1,指針變量加1表示使指針變量指向結(jié)構(gòu)體數(shù)組的下一個元素。
②(++p)->num:先使指針變量本身加1,先使使指針變量指向結(jié)構(gòu)體數(shù)組的下一個元素,然后引用指針變量所指向的結(jié)構(gòu)體數(shù)組元素的成員num的值。