c c 之 main函式引數

2021-09-23 23:31:39 字數 3120 閱讀 3425

一直知道但是沒有深究的東西。

說簡單點就是:

int argc;//表示讀入字串個數

char *ar**;//指標陣列,用來存放讀入的字串

程式的意思逐個輸出所有讀入的字串,每個字串間空乙個製表符間隔。

由於main函式不能被其它函式呼叫,因此不可能在程式內部取得實際值。那麼,在何處把實參值賦予main函式的形參呢?

實際上,main函式的引數值是從作業系統命令列上獲得的。當我們要執行乙個可執行檔案時,在dos提示符下鍵入檔名,再輸入實際引數即可把這些實參傳送到main的形參中去。

dos提示符下命令列的一般形式為: c:>可執行檔名 引數 引數…… (也可以選擇「開始」選單「執行」命令:可執行檔名 引數 引數……)

visual studio中修改命令列引數:專案—>專案屬性—>屬性配置—>除錯—>命令引數

例如:

#include 

using

namespace

std;

int main(int argc,char *ar**,int a,int b)

執行結果見圖:

最後顯示命令列中輸入的引數。如果上例的可執行檔名為e24.exe,存放在a驅動器的盤內。因此輸入的命令行為:

c:>a:e24 basic foxpro fortran

則執行結果為:

basic

foxpro

fortran

該行共有4個引數,執行main時,argc的初值即為4。ar**的4個元素分為4個字串的首位址。執行while語句,每迴圈一次ar**值減1,當ar**等於1時停止迴圈,共迴圈三次,因此共可輸出三個引數。在printf函式中,由於列印項*++ar**是先加1再列印, 故第一次列印的是ar**[1]所指的字串basic。第

二、三次迴圈分別列印後二個字串。而引數e24是檔名,不必輸出。

(1)main函式可以不帶引數,也可以帶引數,這個引數可以認為是main函式的形式引數。c語言規定main函式的有效引數只能有兩個(如果是多個,其實是隨機值)。

ansi-c(c89/c99)的話main()函式有2種主要形式。

int main(void)

int main(int argc, char *ar**)

上面第二種,也可寫成int main(int argc, char **ar**)

ar**[argc]放空指標(null指標)。

argc和ar**可以用別名。

另外,還有一種受系統限制的形式:

int main(int argc, char *ar**, char *envp)

前兩個引數同第二種,第三個引數envp放環境變數。

這個形式很少用。

所以嚴格講,

ansi-c 推薦的帶引數的 main() 函式只有上面第二種這一種。

(2)c語言還規定argc(第乙個形參)必須是整型變數(或者可以隱式強轉成int的,比如char也是可以的,但是double不行),ar**( 第二個形參)必須是指向字串的指標陣列。

(3)但是應該特別注意的是,main的兩個形參和命令列中的引數在位置上不是一一對應的。因為 main 的形參只有二個,而命令列中的引數個數原則上未加限制。argc引數表示了命令列中引數的個數(注意:檔名本身也算乙個引數),argc的值是在輸入命令行時由系統按實際引數的個數自動賦予的。

例如有命令行為:

c:\>e24  basic  foxpro  fortran
由於檔名e24本身也算乙個引數,所以共有4個引數,因此argc取得的值為4。ar**引數是字串指標陣列,其各元素值為命令列中各字串(引數均按字串處理)的首位址。 指標陣列的長度即為引數個數。陣列元素初值由系統自動賦予。其表示如圖所示:

// 例如執行:

rec.exe 4 5.2

argc 等於 3, ar**[0] 是 "rec.exe", ar**[1] 是 "4", ar**[2] 是 "5.2".

//主函式裡若有:

int x;

float y;

char s[80];

strcpy(s,ar**[0]); // 程式名存入了 s

sscanf(ar**[1],"%d",&x); // x 得到數值4

sscanf(ar**[2],"%f",&y); // y 得到數值 5.2

(1) main() 

(2) int main()

(3) int main(void)

(4) int main(int, char**)

(5) int main(int, char*)

(6) int main(int argc, char **ar**)

(7) int main(int argc, char *ar**)

(8) int main( int argc, char *ar**, char*envp)

(9) void main(void)

(1)是(3)的簡寫。不推薦使用。

(2)是(3)的簡寫。在c++中是正確的形式。

(3)在c和c++中都是正確的形式。推薦使用。(還有預設int的main(void)形式)。

(4)和(5)是不用引數時的一種寫法。編譯器級別高時會警告。不推薦使用。

(6)是(7)的另外寫法。兩種都可以,憑個人愛好。

(7)是帶引數的正確的形式。推薦使用。

(8)是一種很少用的寫法,且受系統限制。

(9)一般不認為是正確的寫法。但是在嵌入式系統中有使用(包括void main()形式)

[1]

[2]

c c 之 main函式引數

一直知道但是沒有深究的東西。說簡單點就是 int argc 表示讀入字串個數 char argv 指標陣列,用來存放讀入的字串 程式的意思逐個輸出所有讀入的字串,每個字串間空乙個製表符間隔。由於main函式不能被其它函式呼叫,因此不可能在程式內部取得實際值。那麼,在何處把實參值賦予main函式的形參...

C C 帶引數的main函式

通過win32控制台的main函式的引數,我們可以像使用命令一樣對檔案等資料進行處理 main函式可以不帶引數,也可以帶引數,這個引數可以認為是 main函式的形式引數。c語言規定main函式的引數只能有兩個,習慣上這兩個引數寫為argc和argv。因此,main函式的函式頭可寫為 main arg...

C C 學習之main函式

int main void int main int main int argc,char ar int main int argc,char ar 參1 表示給main函式傳遞的引數的總個數。參2 是乙個陣列!陣列的每乙個元素都是字串 char 測試1 命令列中的中,使用gcc編譯生成 可執行檔案...