一個函數(shù)的參數(shù)的數(shù)目沒有明確的限制,但是參數(shù)過多(例如超過8個)顯然是一種不可取的編程風格。參數(shù)的數(shù)目直接影響調(diào)用函數(shù)的速度,參數(shù)越多,調(diào)用函數(shù)就越慢。另一方面,參數(shù)的數(shù)目少,程序就顯得精練、簡潔,這有助于檢查和發(fā)現(xiàn)程序中的錯誤。因此,通常應該盡可能減少參數(shù)的數(shù)目,如果一個函數(shù)的參數(shù)超過4個,你就應該考慮一下函數(shù)是否編寫得當。 如果一個函數(shù)不得不使用很多參數(shù),你可以定義一個結構來容納這些參數(shù),這是一種非常好的解決方法。在下例中,函數(shù)print_report()需要使用10個參數(shù),然而在它的說明中并沒有列出這些參數(shù),而是通過一個RPT_PARMS結構得到這些參數(shù)。 # include atdio. h typedef struct ( int orientation ; char rpt_name[25]; char rpt_path[40]; int destination; char output_file[25]; int starting_page; int ending_page; char db_name[25]; char db_path[40]; int draft_quality; )RPT_PARMS; void main (void); int print_report (RPT_PARMS* ); void main (void) { RPT_PARMS rpt_parm; /*define the report parameter structure variable * / /* set up the report parameter structure variable to pass to the print_report 0 function */ rpt_parm. orientation = ORIENT_LANDSCAPE; rpt_parm.rpt_name = "QSALES.RPT"; rpt_parm. rpt_path = "Ci\REPORTS" rpt_parm. destination == DEST_FILE; rpt_parm. output_file = "QSALES. TXT" ; rpt_parm. starting_page = 1; rpt_pann. ending_page = RPT_END; rpt_pann.db_name = "SALES. DB"; rpt_parm.db_path = "Ci\DATA"; rpt_pann. draft_quality = TRUE; /*call the print_report 0 function; paaaing it a pointer to the parameteM inatead of paMing it a long liat of 10 aeparate parameteM. * / ret_code = print_report(cu*pt_parm); } int print_report(RPT_PARMS*p) { int rc; /*acccM the report parametcra paaaed to the print_report() function */ oricnt_printcr(p-orientation); Kt_printer_quality((p-draft_quality == TRUE) ? DRAFT ; NORMAL); return rc; } 上例唯一的不足是編譯程序無法檢查引用print_report()函數(shù)時RPT_PARMS結構的10個成員是否符合要求。
創(chuàng)新互聯(lián)公司是專業(yè)的長海網(wǎng)站建設公司,長海接單;提供網(wǎng)站制作、做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行長海網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
#includestdio.h
void?cal(float?a,?float?b);?/*根據(jù)你的意思看,改成這樣*/
int?main(void)
{
float?number1,number2;
scanf("%f?%f",number1,number2);
while((scanf("%f?%f",number1,number2))==2)
{
cal(number1,number2);?????????????????????????//報錯說這一行聲明參數(shù)過多,不知道該如何解決?
printf("over!");
scanf("%f?%f",number1,number2);
printf("Please?enter?another?two?floats\n");
}
printf("IUPUT?ERROR!\n");
return?0;
}
void?cal(float?a,?float?b)/*根據(jù)你的意思看,改成這樣*/
{???double?results;
results=(a-b)/(a*b);
printf("%f",results);
}
內(nèi)存角度來看,函數(shù)的參數(shù)是要入棧的,棧區(qū)大小決定了參數(shù)的個數(shù)。一般C語言程序運行時默認1M的棧空間,以int類型的參數(shù)來看,1M=1024KB=1024*1024字節(jié),32位系統(tǒng)中int類型占4個字節(jié),所以理論上一個函數(shù)最多有262144個int類型的參數(shù)。實際中要遠遠小于這個數(shù),因為應用程序中的局部變量都需要占用??臻g。
內(nèi)存角度來看,函數(shù)的參數(shù)是要入棧的,棧區(qū)大小決定了參數(shù)的個數(shù)。一般C語言程序運行時默認1M的??臻g,以int類型的參數(shù)來看,1M=1024KB=1024*1024字節(jié),32位系統(tǒng)中int類型占4個字節(jié),所以理論上一個函數(shù)最多有262144個int類型的參數(shù)。實際中要遠遠小于這個數(shù),因為應用程序中的局部變量都需要占用??臻g。
C語言的主函數(shù),main最多是兩個參數(shù)
int argc;
char ** argv;
其中argc表示,傳入?yún)?shù)的字符串個數(shù),argv表示參數(shù)中的各個字符串。
網(wǎng)站欄目:c語言多參數(shù)函數(shù) c語言函數(shù)的參數(shù)可以有幾個
分享地址:http://jinyejixie.com/article38/dodhcsp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、做網(wǎng)站、網(wǎng)站營銷、定制開發(fā)、電子商務、網(wǎng)站設計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)