在C語言中可以有多種方法實(shí)現(xiàn)主函數(shù)與函數(shù)間的多值傳遞的。
10年的東區(qū)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整東區(qū)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“東區(qū)網(wǎng)站設(shè)計”,“東區(qū)網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實(shí)執(zhí)行。
最簡單的,是利用實(shí)參-形參傳遞(當(dāng)然這只能是從主函數(shù)傳向函數(shù),是單向的傳遞)。
如果要實(shí)現(xiàn)雙向的傳遞,可以使用全局變量、指針、數(shù)組、結(jié)構(gòu)體。
C語言都是先定義后使用的
通過函數(shù)名調(diào)用如:
double
sum(double
x,double
y)
{
double
z;
z=x+y;
retun(z);
}
main()
{
double
h;
double
a,b;
h=sum(a,b);
}
最簡單的方式就是在你調(diào)用的函數(shù)后面加跳轉(zhuǎn)語句 例如 goto a;然后你在你MAIN函數(shù)的定義變量的后面加上a:就行了雖然不推薦用這種方式 但這是最簡單的。你也可以用其他的例如 while for do while 等循環(huán)語句寫這個
float max(struct student stu)函數(shù)參數(shù)的類型為struct student
所以你在函數(shù)內(nèi)部使用stu[0]這種用法 把它當(dāng)成數(shù)組用一定會出錯的
至于為什么加上
ma=max(stu);/*加上這個函數(shù)后就出錯了,沒它之前程序可以執(zhí)行*/
才報錯,是因?yàn)槟銢]有調(diào)用那個函數(shù) 函數(shù)不會被編譯
建議修改max函數(shù) 如下
float max(struct student *student)//這里函數(shù)參數(shù)不要和全局變量重名 會引起一些不必要的麻煩
{
int i;
float n;
n=average(student[0]);/*為什么這邊說illegal for struct*/
for(i=0;i5;i++)
if(naverage(student[i])) n=average(student[i]);
return n;
}
試試 我沒編譯 如果再有問題的話繼續(xù) 我?guī)湍愀?/p>
(1)
里傳的是main里y的值,傳過去的x在函數(shù)b里只是個局部對象,影響不到main里的實(shí)參y
(2)
的實(shí)質(zhì)是傳遞了y數(shù)組的首地址,也就是y數(shù)組中唯一一個元素的地址,b函數(shù)里接受到x其實(shí)是main里y[0]的地址,所以x[0]
==
main里的y,傳給scanf的變量地址也就是main里y的地址,所以y接受到了b函數(shù)中scanf的輸入
2的實(shí)質(zhì)是傳遞變量的地址,然后通過地址修改實(shí)參,1則是傳遞變量本身的值
c里面如果想通過形參修改實(shí)參,只能使用2的方法
void
b(struct
a
x[
])
等價于
void
b(
struct
a*
x
)
使用全局變量進(jìn)行數(shù)據(jù)的傳遞是可以的。
優(yōu)點(diǎn)是:很方便調(diào)用,因?yàn)檎l都可以使用它,不用很麻煩的傳遞參數(shù)
缺點(diǎn)是:就是應(yīng)為誰都可以使用它,大家都可以修改它,可能導(dǎo)致不可預(yù)測的錯誤,也不便于調(diào)試,當(dāng)程序中變量個數(shù)較多時,一不小心很容易在無意中修改了全局變量的值,導(dǎo)致查找、糾錯麻煩。所以不建議大量使用全局變量。