main函数的参数详解,它们是何时何处传入的?(main函数的参数值是从操作系统命令行上获得的)
一般的main函數(shù)都是不帶參數(shù)的,因此main 后的括號(hào)都是空括號(hào)。實(shí)際上,main函數(shù)可以帶參數(shù),這個(gè)參數(shù)可以認(rèn)為是 main函數(shù)的形式參數(shù)。C語(yǔ)言規(guī)定main函數(shù)的參數(shù)只能有兩個(gè), 習(xí)慣上這兩個(gè)參數(shù)寫(xiě)為argc和argv。因此,main函數(shù)的函數(shù)頭可寫(xiě)為: main (argc,argv)C語(yǔ)言還規(guī)定argc(第一個(gè)形參)必須是整型變量,argv( 第二個(gè)形參)必須是指向字符串的指針數(shù)組。加上形參說(shuō)明后,main函數(shù)的函數(shù)頭可以寫(xiě)為:
main (int argc,char *argv[])
由于main函數(shù)不能被其它函數(shù)調(diào)用, 因此不可能在程序內(nèi)部取得實(shí)際值。那么,在何處把實(shí)參值賦予main函數(shù)的形參呢? 實(shí)際上,main函數(shù)的參數(shù)值是從操作系統(tǒng)命令行上獲得的。當(dāng)我們要運(yùn)行一個(gè)可執(zhí)行文件時(shí),在命令行鍵入文件名,再輸入實(shí)際參數(shù)即可把這些實(shí)參傳送到main的形參中去。
命令行下運(yùn)行可執(zhí)行文件的一般形式為:可執(zhí)行文件名 參數(shù) 參數(shù)……,命令行中的參數(shù)個(gè)數(shù)原則上未加限制。argc參數(shù)表示了命令行中參數(shù)的個(gè)數(shù)(注意:文件名本身也算一個(gè)參數(shù),而且是第一個(gè)參數(shù),是argv[0]),argc的值是在輸入命令行時(shí)由系統(tǒng)按實(shí)際參數(shù)的個(gè)數(shù)自動(dòng)賦予的。例如有命令行為./a.out a b b d a,由于文件名a.out本身也算一個(gè)參數(shù),所以共有6個(gè)參數(shù),因此argc取得的值為6。argv參數(shù)是字符串指針數(shù)組,其各元素值為命令行中各字符串(參數(shù)均按字符串處理)的首地址。 指針數(shù)組的長(zhǎng)度即為參數(shù)個(gè)數(shù)。數(shù)組元素初值由系統(tǒng)自動(dòng)賦予。
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[]){
int i=0;
while(i<argc)
{
printf("%s\n",argv[i]); //%s表示輸出char * 的變量,\n表示輸出后換行。
i++;
}
return 0;
}
本例是顯示命令行中輸入的參數(shù)。如果上例的可執(zhí)行文件名為a.out,并輸入的命令行為:
lzb@lzb:~/projects/curls/http_post/lib$ ./a.out a b b d a
則運(yùn)行結(jié)果為:
lzb@lzb:~/projects/curls/http_post/lib$ ./a.out a b b d a
./a.out
a
b
b
d
a
復(fù)制代碼
總結(jié)
以上是生活随笔為你收集整理的main函数的参数详解,它们是何时何处传入的?(main函数的参数值是从操作系统命令行上获得的)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: main函数第3个参数envp装的是什么
- 下一篇: fork()与pid