[編輯本段]main函數(shù)概述
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計,景寧畬族自治網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:景寧畬族自治等地區(qū)。景寧畬族自治做網(wǎng)站價格咨詢:18982081108
日常生活中,要完成一件復(fù)雜的功能,我們總是習(xí)慣把“大功能”分解為多個“小功能”以實現(xiàn)。在C++程序的世界里,“功能”可稱呼為“函數(shù)”,因此“函數(shù)”其實就是一段實現(xiàn)了某種功能的代碼,并且可以供其它代碼調(diào)用。
一個程序,無論復(fù)雜或簡單,總體上都是一個“函數(shù)”;這個函數(shù)就稱為“main 函數(shù)”,也就是“主函數(shù)”。比如有個“做菜”程序,那么“做菜”這個過程就是“主函數(shù)”。在主函數(shù)中,根據(jù)情況,你可能還需要調(diào)用“買菜,切菜,炒菜”等子函數(shù)。
[編輯本段]main函數(shù)的參數(shù)
C程序最大的特點就是所有的程序都是用函數(shù)來裝配的。main()稱之為主函數(shù),是所有程
序運行的入口。其余函數(shù)分為有參或無參兩種,均由main()函數(shù)或其它一般函數(shù)調(diào)用,若調(diào)用
的是有參函數(shù),則參數(shù)在調(diào)用時傳遞。
main()
{
...
y1=f1(x1,x2);
...
}
f1(int a,int b)
{
....
Y2=f2(x3,x4);
....
}
f2(int m,int n)
{
....
.....
}
在前面課程的學(xué)習(xí)中,對main()函數(shù)始終作為主調(diào)函數(shù)處理,也就是說,允許main()調(diào)用
其它函數(shù)并傳遞參數(shù)。事實上,main()函數(shù)既可以是無參函數(shù),也可以是有參的函數(shù)。對于有
參的形式來說,就需要向其傳遞參數(shù)。但是其它任何函數(shù)均不能調(diào)用main()函數(shù)。當(dāng)然也同樣
無法向main()函數(shù)傳遞,只能由程序之外傳遞而來。這個具體的問題怎樣解決呢?
我們先看一下main()函數(shù)的帶參的形式:
main(argc,argv)
int argc,char *argv[];
{
.....
}
從函數(shù)參數(shù)的形式上看,包含一個整型和一個指針數(shù)組。當(dāng)一個C的源程序經(jīng)過編譯、鏈接后,會生成擴展名為.EXE的可執(zhí)行文件,這是可以在操作系統(tǒng)下直接運行的文件,換句話說,就是由系統(tǒng)來啟動運行的。對main()函數(shù)既然不能由其它函數(shù)調(diào)用和傳遞參數(shù),就只能由
系統(tǒng)在啟動運行時傳遞參數(shù)了。
在操作系統(tǒng)環(huán)境下,一條完整的運行命令應(yīng)包括兩部分:命令與相應(yīng)的參數(shù)。其格式為:
命令參數(shù)1參數(shù)2....參數(shù)n?
此格式也稱為命令行。命令行中的命令就是可執(zhí)行文件的文件名,其后所跟參數(shù)需用空格分隔,并為對命令的進一步補充,也即是傳遞給main()函數(shù)的參數(shù)。
命令行與main()函數(shù)的參數(shù)存在如下的關(guān)系:
設(shè)命令行為:program str1 str2 str3 str4 str5
其中program為文件名,也就是一個由program.c經(jīng)編譯、鏈接后生成的可執(zhí)行文件program.exe,其后各跟5個參數(shù)。對main()函數(shù)來說,它的參數(shù)argc記錄了命令行中命令與參數(shù)的個數(shù),共6個,指針數(shù)組的大小由參數(shù)argc的值決定,即為char*argv[6],指針數(shù)組的取值情況如圖6-15所示。
數(shù)組的各指針分別指向一個字符串。應(yīng)當(dāng)引起注意的是接收到的指針數(shù)組的各指針是從命令行的開始接收的,首先接收到的是命令,其后
才是參數(shù)。
下面用實例來說明帶參數(shù)的main()函數(shù)的正確使用。
[例6-29] 利用圖形庫函數(shù)繪制一個變化的環(huán)。它是把一個半徑為R 1的圓周分成n份,然
后以每個等分點為圓心,以R s為半徑畫n個圓(關(guān)于作圖的詳細(xì)理論本教材第9章第1節(jié)作了專
門介紹,這里只作簡單分析)。利用m a i n ( )函數(shù)的帶參數(shù)形式,我們可以從鍵盤以命令行的方
式輸入R 1和R s及屏幕的背景色。
#include graphics.h /*包含圖形庫函數(shù)的頭文件* /
#include math.h
#define pi 4.1415926
m a i n ( a r g c , a r g v )
int argc;char *argv[]; /* 定義帶參數(shù)的m a i n ( ) * /
{
int x,y,r1,rs,color;
double a;
int gdriver=DETECT,gmode;
initgraph(gdriver,gmode,"..\\bgi ")啟;/動*圖形工作方式*/
r1=atoi(argv[1]);/*計算基礎(chǔ)圓半徑*/
rs=atoi(argv[2]);/*計算同心圓半徑*/
color=atoi(argv[3]);/*背景色*/
cleardevice();/*清除圖形屏幕*/
setbkcolor(color);/*設(shè)置背景色*/
setcolor(4);/*設(shè)置圖形顯示顏色*/
for(a=0;a=2*pi;a+=pi/18)/*繪制同心圓*/
{
x=r1*cos(a)+320;
y=r1*sin(a)+240;
circle(x,y,rs);/*以圓心坐標(biāo)為x、y,半徑為rs畫圓*/
}
getch();/*等待按鍵繼續(xù)*/
close graph();/*關(guān)閉圖形工作方式*/
}
若程序名為L6-29.c,經(jīng)編譯、連結(jié)生成可執(zhí)行文件L6-29.exe。在操作系統(tǒng)的環(huán)境下運行
程序,命令行方式為:
l6-29 40 20 3
則命令行與main()函數(shù)的參數(shù)有如圖6-16所示的關(guān)系
圖6-16中,argv[0]是程序名,argv[1]是r1的值,
argv[2]是rs的值,argv[3]是屏幕的背景色。
由于指針數(shù)組均存放字符串,所需的圓半徑及背景
色彩通過atoi()函數(shù)轉(zhuǎn)換為整型。
通過帶參數(shù)的main()函數(shù),我們可以為自己的程序設(shè)置口令,在運行程序的命令行中給出所需的口令,正確則繼續(xù),否則退出。程序圖形輸出如圖6-17所示。
[例6-30]將上述程序作修改,在程序的入口處添置密碼,若給定密碼正確,則顯示圖
形。
#includegraphics.h
#include math.h
#define pi 4.1415926
m a i n ( a r g c , a r g v )
int argc;char *argv[];
{
int x,y,r1,rs,color;
double a;
int gdriver=DETECT,gmode;
if (strcmp(argv[1],"pass")!=0) 設(shè)/置* 口令的比較*/
{ printf("password error!\n");
e x i t ( 0 ) ;
}
initgraph(gdriver,gmode,"..\\bgi ");
r1=atoi(argv[2]);
rs=atoi(argv[3]);
color=atoi(argv[4]);
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);
}
getch();
closegraph();
}
在操作系統(tǒng)的環(huán)境下運行程序, 命令行中增加口令“p a s s”,命令行方式為:
l6-30 pass 20 40 3
指針數(shù)組的存儲字符串如圖6-18所示。
若給定字符串a(chǎn)rgv[1]的值是pass,則程序正確運行,否則程序退出??诹钫_的情況下,顯示的圖形為圖6-17中的一個。
[編輯本段]函數(shù)的分類
1、從用戶使用的角度看,函數(shù)有兩種:
(1)、標(biāo)準(zhǔn)函數(shù),即庫函數(shù)。這是由系統(tǒng)提供的。
(2)、用戶自定義的函數(shù)??梢越鉀Q用戶的專門需要。
2、從函數(shù)的形勢看,函數(shù)分兩類:
(1)無參函數(shù)。printstar和print_message就是無參函數(shù)。在調(diào)用無參函數(shù)時,主調(diào)函數(shù)并不將數(shù)據(jù)傳送給被調(diào)用函數(shù),一般用來執(zhí)行指定的一組操作。
(2)有參函數(shù)。在調(diào)用函數(shù)時,在主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞。也就是說,主調(diào)函數(shù)可以將數(shù)據(jù)傳遞給被調(diào)用函數(shù)使用,被調(diào)用函數(shù)中的數(shù)據(jù)也可以帶回來供主調(diào)函數(shù)使用。
[編輯本段]函數(shù)定義的一般形式
1、無參函數(shù)的定義形式
類型標(biāo)示符 函數(shù)名()
{聲明部分
語句
}
2、有參函數(shù)定義的一般形式
類型標(biāo)示符 函數(shù)名 (形式參數(shù)列表)
{聲明部分
語句
}
3、可以有“空函數(shù)”
它的形式為
類型說明符 函數(shù)名()
{ }
例如:
dummy(){}
4、對形參的聲明的傳統(tǒng)方式
在老版本c語言中,對形參類型的聲明是放在函數(shù)定義的第二行,也就是不再第一行的括號內(nèi)指定形參的類型,而在括號外單獨指定,例如上面定義的max函數(shù)可以寫成一下形式:
int max (x,y)/*指定形參x,y*/
int x,y;/*對形參指定類型*/
{int z;
z=xy?x:y;
return(z);
}
解釋如下:
1、int main()是C語言main函數(shù)的一種聲明方式;
2、int表示函數(shù)的返回值類型,表示該主函數(shù)的返回值是一個int類型的值;
3、main表示主函數(shù),是C語言約定的程序執(zhí)行入口,其標(biāo)準(zhǔn)的定義格式為int main(int argc, char *argv[]);在int main()中,()中沒有數(shù)值表示入?yún)榭眨韧趇nt main(void);
4、事例中printf("%f",a);表示將a的值作為浮點類型打印出來,在屏幕上顯示,而主函數(shù)的返回類型int會將返回的值回傳給主調(diào)進程,而不是在屏幕輸出。
5、因此,printf的輸出類型跟主函數(shù)的返回類型沒有關(guān)系,互不關(guān)聯(lián)。事例中,return 0 對應(yīng)才是主函數(shù)的返回值類型。
拓展資料
在C語言當(dāng)中,一個程序,無論復(fù)雜或簡單,總體上都是一個“函數(shù)”;這個函數(shù)就稱為“main() 函數(shù)”,也就是“主函數(shù)”。比如有個“做菜”程序,那么“ 做菜 ”這個過程就是“主函數(shù)”。在主函數(shù)中,根據(jù)情況,你可能還需要調(diào)用“買菜,切菜,炒菜”等子函數(shù)。
main函數(shù)在程序中大多數(shù)是必須存在的,但是依然有例外情況,比如windows編程中可以編寫一個動態(tài)鏈接庫(dll)模塊,這是其他windows程序可以使用的代碼。由于DLL模塊不是獨立的程序,因此不需要main函數(shù)。再比如,用于專業(yè)環(huán)境的程序-----如機器人中的控制芯片--可能不需要main函數(shù)。
參考資料:百度百科:main函數(shù)
void
main()函數(shù)是
C程序
處理的起點.main()函數(shù)可以返回一個值,也可以不
返回值
.如果某個函數(shù)沒有返回值,那么在它的前面加個前綴
void
一個最最簡單的例子
#includestdion.h
void
main()
{
printf("測試\n");
}
就會直接輸入
"測試"
二字