C語言中main函式的引數具體解釋

2021-09-06 23:38:44 字數 1322 閱讀 1409

main函式的定義形式

main函式能夠不帶引數,也能夠帶引數,這個引數能夠覺得是 main函式的形式引數。c語言規定main函式的引數僅僅能有兩個,習慣上這兩個引數寫為argc和argv。所以c99標準中規定僅僅有下面兩種定義方式是正確的:

int main(void) //無參形式

int main(int argc, char *argv) //有參形式

當然有參形式能夠進行演變,所以以下的寫法也是正確的(同一時候變數名是能夠更換的):

int main(int argc, char **argv) //有參的還有一種形式

為什麼能夠演變?

依據前面的一些介紹,能夠看出終端傳遞給main函式的引數是乙個二維陣列的首位址,這個二維陣列的每一維都是乙個字串。既然這種話就比較好理解了,當我們在呼叫函式的時候假設傳遞的是陣列首位址的話,那麼傳遞過去的引數會進行退化為指標,比方傳遞的是int型陣列a,接收方接收到的就是乙個int *型別的指標,所以這裡也是一樣,終端傳遞給main函式的二維陣列也會退化成二級指標即char **。

main函式引數的值

再來說一說main函式的引數的值,如果你在終端上執行./test  hello world

那麼argc和argv的值分別為多少呢?argc的值為3,而argv裡面的字串也為3個,這是由於你在執行c程式的時候系統缺省會把可執行檔案的名字也作為乙個引數傳遞給main函式,而且引數的第乙個就是可執行檔案的名字(會包括具體路徑)。

使用main函式的引數

for(i=0; i < argc; i++)

printf("%s\n", *argv++);

這個是沒有問題的,還有一種操作方式是:

for(i=0; i < argc; i++)

printf("%s\n", argv[i]);

可是最後的一種方式就是錯誤的:

for(i=0; i < argc; i++)

printf("%s\n", *argv[i]);

我最開始嘗試的就是這樣的方式,竟然出現錯誤了,這是為何?argv是乙個指標陣列名,那麼argv[0]、argv[1]這就是乙個指標的值啊,然後再使用*p的方式取用裡面的資料,怎麼會出錯呢?最後最終想明確,這是列印的字串,所以僅僅須要傳遞陣列名或者指標值就能夠了!比方定義了

char *p="hello world.";

假設要列印這個字串當然使用的是

printf("%s\n", p);

假設列印*p的話,豈不是僅僅取了字串中的乙個h字元,列印當然是會報錯的。

C語言中main函式的引數

我們經常用的main函式都是不帶引數的。因此main 後的括號都是空括號。實際上,main函式可以帶引數,這個引數可以認為是 main函式的形式引數。語言規定main函式的引數只能有兩個,習慣上這兩個引數寫為argc和argv。因此,main函式的函式頭可寫為 main argc,argv 語言還規...

C語言中main函式的引數

我們經常用的main函式都是不帶引數的。因此main 後的括號都是空括號。實際上,main函式可以帶引數,這個引數可以認為是 main函式的形式引數。語言規定main函式的引數只能有兩個,習慣上這兩個引數寫為argc和argv。因此,main函式的函式頭可寫為 main argc,argv 語言還規...

C語言中main函式的引數

今天在嵌入式課程學習時發現一些c語言程式的main函式存在引數,針對這一問題我查詢了一些資料,整理了一下。main函式主要有這種形式 main int argc,char args 主要在liunx系統中使用命令讀取檔案資訊時用到,在dos中也有著同樣的用處。在一些編譯器允許將main 的返回型別宣...