一直知道但是沒有深究的東西。
說簡單點就是:
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編譯生成 可執行檔案...