今天和大家討論一個常見的但是不容易深入了解的知識點。那就是 main 函數聲明中使用到的 argc 和 argv 的含義。
通常我們寫主函數的時候一般都是直接使用int main() 或者 void main() 來聲明 main 函數。
但是你知道嗎?在c89/c99的語言標準中,main函數的聲明方式還包括以下形式:
代碼語言:javascript
代碼運行次數:0
運行
AI代碼解釋
int main(int argc,char **argv)
int main(int argc,char *argv[])
以上兩種 main 函數的聲明方式具有相同的含義。argc 和 argv 的主要用途為程序運行時,將命令行中的輸入參數傳遞給調用函數。
這兩個參數的意義分別如下:
int argc:參數個數計數,是一個 int 變量,取值為「用戶調用程序輸入的參數」+ 1。
為什么要加 1 呢?我們接著往下看。
char **argv:一個存儲字符串的數組,會以字符串的形式保存用戶調用程序時傳入的參數。
代碼語言:javascript
代碼運行次數:0
運行
AI代碼解釋
argv[0] = 調用程序時使用的程序名
argv[1] = 參數1
argv[2] = 參數2
argv[3] = 參數3
。。。
現在大家知道為什么 argc 的取值要 +1了吧!原因就在于 argv 中存儲的第一個字符串是調用程序名。
下面我們動手實踐一下,將下面的代碼編譯后生成對應的可執行程序(.exe)后運行。
代碼語言:javascript
代碼運行次數:0
運行
AI代碼解釋
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{printf("參數個數=%d\n", argc);for (int i = 0; i < argc; i++){printf("%s\n", argv[i]);}system("PAUSE");return 0;
}
在操作系統中打開一個命令行。
代碼語言:javascript
代碼運行次數:0
運行
AI代碼解釋
windows 操作系統 win + R 快捷鍵打開搜索框,輸入 cmd 回車即可。
linux 操作系統 ctrl + alt + t 快捷鍵即可。
然后我們在命令行中調用該程序,執行 main 函數,輸出結果如下圖所示:
從上述程序的輸出結果可以清楚的看到 argc 和 argv 代表的具體含義