主函式的定義式子 int main int argc ,int argv 中的argc和argv分別代表什麼?

時間 2021-06-04 15:38:16

1樓:何必

《標準C語言基礎教程(第四版)》,517頁對於main()的兩個引數,C語言要求它們分別被命名為argc和argv。因為argc是乙個整數,所以它的宣告將是int argc。因為argv是乙個它的元素指向實際命令列引數被儲存的位置位址的陣列,它的適當宣告是char *argv。

這只不過是乙個指標陣列的宣告。它被讀為「argv是乙個元素指向字元的指標的陣列」。這些集合在一起,乙個將接收命令列引數的main()函式的全部函式首部是:

int main(int argc, char *argv)無論多少個引數從命令列上輸入,main()只需要兩條標準由argc和argv提供的資訊:命令列上的項數,和指向每個引數被實際儲存的位置的其實位址的列表。

英文原版:A First Book of ANSI C

2樓:陳良喬

在《C程式設計伴侶》中有這樣一段關於這個問題的論述,供你參考

例如,我們以下面的命令來執行乙個加法計算程式:

add.exe 4 5 (以Windows平台為例)

那麼,作業系統在執行這個命令的時候,會將相應的命令選項「add.exe 4 5」傳遞給主函式的引數。在主函式中,我們可以獲得argc等於3,表示這個執行命令有3個命令選項。

而argv指標陣列中儲存的字串指標,分別指向「add[Chen1] .exe」、「4」、「5」這三個字串。這樣,我們就可以通過argv指標陣列來獲得具體的命令選項,從而可以通過在執行函式時給出命令選項,對函式的行為進行控制。

例如,我們可以將上面的add程式實現如下,從而以命令列選項的形式給定兩個加數:

#include

#include

// 可以接受命令選項的主函式

int main(int argc, char* argv)

從argv字串指標陣列中獲取引數

inta = atoi(argv[1]);

intb = atoi(argv[2]);

intresult = a + b;

輸出結果

printf("%s

+ %s = %d\n",argv[1],argv[2],result);

return

0; }

在主函式中,我們首先對選項引數的個數進行了判斷,以此來判斷程式的執行方式是否合法。然後,就是從argv字串指標陣列中獲取執行時的選項了。因為argv提供給我們的是選項引數的字串,如果是數字引數,我們常常還需要利用atoi()等函式,將字串轉換成對應的數值資料。

這裡,可以用陣列下標的方式訪問argv陣列,自然也可以像譚老師在書中所展示的那樣,用指標的形式訪問這個陣列中的各個字串指標。完成選項引數的轉換之後,我們就可以將其計算並輸出結果。在輸出的時候,我們又利用argv陣列中儲存的字串指標,將選項引數直接輸出了。

可以接受命令行選項引數的main()函式,讓我們可以在執行程式的時候,對程式的行為進行控制,從而極大地增加了程式的靈活性,這也是指標陣列的乙個主要應用。

[Chen1]其實是add.exe

按照上面的介紹,自己寫個程式試試就清楚了

更多可以參考《C程式設計伴侶》試讀與預訂

3樓:Cascade

arg表示argument,也就是引數。

c表示count,也就是個數。

v表示value或者vector,表示引數值或者存放引數值的陣列。

在程式被呼叫時,這兩個引數是由系統確定的。內容是在程式被執行時傳遞進來的引數。

argc表示引數的個數,argv是乙個陣列,包含引數的內容。

比如,你寫了乙個程式叫做GVDLHGX,然後輸入以下命令。

GVDLHGX 10000 Times

那麼你在main函式裡面看到的這兩個引數就會變成3和乙個陣列之所以是3是因為一般程式自己算作第乙個引數了。

只是一種main,在別的語言中可能就不這麼寫了。而且根據系統不同也支援更多的引數,比如有帶環境變數什麼的。

4樓:薛非

argc和argv用於向main()傳遞程式啟動時的相關資訊,具體情況與實現有關。

一種常見的情況是

argc是命令列引數的個數,

argv[0], argv[1]……argv[argc-1]都是指向string的指標,這些string就是命令列中的各個引數。

例如,假如命令列是

X a bc

則argc為3

argv[1]和argv[2]則分別是指向"a"和"bc"起始字元的指標

argv[0]指向什麼樣的字串與具體實現有關

argv[argc]一定是NULL

Excel的RNAK函式,這兩個式子有什麼區別嗎?

廓然 絕對引用和相對引用的區別。單元格引用包括絕對引用 相對引用和混合引用,按F4鍵可以對單元格引用進行切換。實際操作一下就會發現明顯的區別。 小白公子 就F3這個單元格來說,上面的那個公式都為正確的。但是設計公式,我們絕對不是只用在乙個單元格,因此絕對引用在公式拖拽的過程中起著大作用。那我們來認識...

關於可測函式的定義?

謎團 第一種定義是最一般的定義。第二種定義是從可測空間到的函式可測定義。這時候是上的 代數取由所有開集生成的 代數 稱為 代數 第一種定義在這種特殊空間上就變為,由於屬於開集生成的 代數,所以第一種定義可以推出第二種定義。從第二種定義推第一種定義麻煩一些。假設也就是是所有拉回去還是可測集的集的集合。...

matlab中symsum級數函式定義的不定和是什麼?

其實題主直接 help symsum 大概就能知道symsum是如何求解符號級數的了。利用symsum進行符號級數求和首先需要指定符號變數 symvar 然後指定符號變數的取值範圍 range 最後按照正確的呼叫格式就能完成計算。隨手搬運幾個出自幫助文件的簡單例子 syms i n define s...