計算機二級輔導:main函數的參數

字號:

C程序大的特點就是所有的程序都是用函數來裝配的。main()稱之為主函數,是所有程
    序運行的入口。其余函數分為有參或無參兩種,均由main()函數或其它一般函數調用,若調用
    的是有參函數,則參數在調用時傳遞。
    main()
    {
    ...
    y1=f1(x1,x2);
    ...
    }
    f1(int a,int b)
    {
    ....
    Y2=f2(x3,x4);
    ....
    }
    f2(int m,int n)
    {
    ....
    .....
    }
    在前面課程的學習中,對main()函數始終作為主調函數處理,也就是說,允許main()調用
    其它函數并傳遞參數。事實上,main()函數既可以是無參函數,也可以是有參的函數。對于有
    參的形式來說,就需要向其傳遞參數。但是其它任何函數均不能調用main()函數。當然也同樣
    無法向main()函數傳遞,只能由程序之外傳遞而來。這個具體的問題怎樣解決呢?來源:www.examda.com
    我們先看一下main()函數的帶參的形式:
    main(argc,argv)
    int argc,char *argv[];
    {
    .....
    }
    從函數參數的形式上看,包含一個整型和一個指針數組。當一個C的源程序經過編譯、鏈接后,會生成擴展名為.EXE的可執(zhí)行文件,這是可以在操作系統下直接運行的文件,換句話說,就是由系統來啟動運行的。對main()函數既然不能由其它函數調用和傳遞參數,就只能由
    系統在啟動運行時傳遞參數了。
    在操作系統環(huán)境下,一條完整的運行命令應包括兩部分:命令與相應的參數。其格式為:
    命令參數1參數2....參數n¿
    此格式也稱為命令行。命令行中的命令就是可執(zhí)行文件的文件名,其后所跟參數需用空格分隔,并為對命令的進一步補充,也即是傳遞給main()函數的參數。
    命令行與main()函數的參數存在如下的關系:
    設命令行為:program str1 str2 str3 str4 str5
    其中program為文件名,也就是一個由program.c經編譯、鏈接后生成的可執(zhí)行文件program.exe,其后各跟5個參數。對main()函數來說,它的參數argc記錄了命令行中命令與參數的個數,共6個,指針數組的大小由參數argc的值決定,即為char*argv[6],指針數組的取值情況如圖6-15所示。
    數組的各指針分別指向一個字符串。應當引起注意的是接收到的指針數組的各指針是從命令行的開始接收的,首先接收到的是命令,其后
    才是參數。
    下面用實例來說明帶參數的main()函數的正確使用。
    [例6-29] 利用圖形庫函數繪制一個變化的環(huán)。它是把一個半徑為R 1的圓周分成n份,然
    后以每個等分點為圓心,以R s為半徑畫n個圓(關于作圖的詳細理論本教材第9章第1節(jié)作了專
    門介紹,這里只作簡單分析)。利用m a i n ( )函數的帶參數形式,我們可以從鍵盤以命令行的方
    式輸入R 1和R s及屏幕的背景色。
    #include /*包含圖形庫函數的頭文件* /
    #include
    #define pi 4.1415926
    m a i n ( a r g c , a r g v )
    int argc;char *argv[]; /* 定義帶參數的m a i n ( ) * /
    {
    int x,y,r1,rs,color;
    double a;
    int gdriver=DETECT,gmode;
    initgraph(&gdriver,&gmode,"..\\bgi ")啟;/動*圖形工作方式*/
    r1=atoi(argv[1]);/*計算基礎圓半徑*/
    rs=atoi(argv[2]);/*計算同心圓半徑*/
    color=atoi(argv[3]);/*背景色*/
    cleardevice();/*清除圖形屏幕*/
    setbkcolor(color);/*設置背景色*/
    setcolor(4);/*設置圖形顯示顏色*/
    for(a=0;a<=2*pi;a+=pi/18)/*繪制同心圓*/
    {
    x=r1*cos(a)+320;
    y=r1*sin(a)+240;
    circle(x,y,rs);/*以圓心坐標為x、y,半徑為rs畫圓*/
    }
    getch();/*等待按鍵繼續(xù)*/
    close graph();/*關閉圖形工作方式*/
    }