C語言中的main函數參數,你了解嗎?

2020-12-06 老張話IT

小豆丁:老張啊,我遇到困難了...

老張:啥困難啊?愁眉苦臉的,不至於哈!

小豆丁:今天我才發現,C語言中main函數還有參數,可是我不知道這個參數表示的是什麼含義,也不知道怎麼用。

老張:就這點問題?

小豆丁:嗯吶,我沒研究明白,好沮喪...

老張:這個問題不難,別放棄哈,我教你!

小豆丁:還是老張你最好!

老張:在C語言中,我們一般情況下不使用main函數的參數,但是並不代碼這main函數沒有參數,在當前C語言階段,main函數可以有兩個參數,一個是整數類型的argc,一個是指針數組argv,我們可以寫成這個樣子:

int main(int artc,char* argv[]){}

小豆丁:那這兩個參數表示什麼含義啊?

老張:我們先說第二個參數,第二個參數是一個指針數組,數組中每個元素都是char類型的指針,每個指針指向一個字符串。

小豆丁:那這些字符串來自於哪裡啊?主函數也不能被其他函數調用啊,也沒辦法對主函數傳參啊?

老張:沒錯,我們不能調用主函數!其實主函數中第二個參數裡的每一個指針所指向的字符串都來自於用戶在命令行上的參數。比如說,你寫好一個程序,編譯後生成a.out可執行程序,當你在運行的時候,你會在終端命令行上輸入:a.out,那麼這個argv數組中的第一個元素argv[0]所指向的字符串就是"a.out"。如果你運行時輸入:a.out 40 100,那麼argv數組中第一個元素argv[0]指向字符串"a.out",第二個元素argv[1]指向字符串"40",第三個元素指向argv[2]指向字符串"100"。所以當我們在程序中就可以用數組元素進行相關的數據處理了。

小豆丁:哦,原來指針數組中每個元素指向的內容是來自於命令行參數啊。可是我在什麼時候會用到這種方式呢?有什麼好處啊?

老張:有些時候我們寫好一個程序,要處理數值不同的各種場景, 那麼你就可以用主函數參數進行數值的傳遞,每次運行的時候,只要給不同的數值就行,就不需要回頭更改代碼重新編譯了。

小豆丁:哦,明白了。那主函數的第一個參數呢?

老張:第一個參數是個整數類型的參數,它表示命令行參數有多少個,也就是第二個參數argv數組的元素個數。

小豆丁:這個樣子啊,那我知道了。

小豆丁:師傅啊,我覺得學編程好難啊,好沮喪...

老張:騷年!生活本就如此,哪有那麼多的一帆風順,誰不是在負重前行呢?別輕易放棄,只要努力,終究會拼到你想要的美好!

相關焦點

  • C語言中的main()函數可以有好幾種類型,為何都能做入口函數呢?
    而C語言沒有重載語法,為什麼在C語言程序中,可以有不同類型的 main() 函數呢?為什麼在C語言程序中,可以有不同類型的 main() 函數呢?C語言程序支持多種類型 main() 函數,其實和支持可變參數函數是類似的。
  • C語言 main 函數到底為啥這麼寫?
    但 凡是學過C語言的人,都知道要先寫main函數,然而很多時候我們看到的main函數卻各有差異,這究竟是為啥? 哪種是對的呢? 今天我們就來聊聊main函數。不過在C89標準中其實是可以的,由於沒有聲明返回類型,所以才會返回默認值int。 初學者經常會使用的形式,但是並不知道來源在哪,在C89/C99/C11等文檔中都沒有提到這種形式的痕跡。這種寫法的返回值是void,沒有參數。值得注意的是,一旦聲明是void,在程序退出後,想要獲取其退出狀態也就不可以了。
  • 你有沒有想過,C語言 main 函數到底為啥這麼寫?
    但凡是學過C語言的人,都知道要先寫main函數,然而很多時候我們看到的main函數卻各有差異,這究竟是為啥?哪種是對的呢?今天我們就來聊聊main函數。那麼main函數一共有多少個版本呢?1、main()直接的mian()並沒有返回值,沒有入參。這種寫法實際來說,部分編譯器會顯示警告,並且會返回默認值為int。不過在C89標準中其實是可以的,由於沒有聲明返回類型,所以才會返回默認值int。
  • 深入理解C語言
    導讀:Dennis Ritchie過世了,他發明了C語言,一個影響深遠並徹底改變世界的計算機語言。一門經歷40多年的到今天還長盛不訓的語言,今天很多語言都受到C的影響,C++,Java,C#,Perl,PHP,Javascript等等。但是,你對C了解嗎?相信你看過本站的《C語言的謎題》還有《誰說C語言很簡單?》。
  • 你知道C語言中函數調用和嵌套嗎?函數必學模塊,你不得不知!
    一、函數調用 什麼是函數調用呢?通常在C語言中,一個完整的項目程序是不可能在一個函數中實現所有的功能。而是由若干功能不同的函數來實現,並且函數之間會存在互相調用的情況。
  • 很多C語言初學者都非常好奇的問題,怎樣定義可以可變參數函數?
    大多數初學者人生中編寫的第一段C語言代碼就是這段「裡程碑」式的代碼:#include <stdio.h>int main(){printf("hello world\n");return 0
  • R語言之plot繪圖函數的使用
    R有強大的繪圖功能,plot()函數是一種常用的繪圖函數,用其可以繪製散點圖、曲線圖等。plot函數的語法格式R語言中plot()函數的基本格式如下:plot(x,y,...)plot函數中,x和y分別表示所繪圖形的橫坐標和縱坐標;函數中的...為附加的參數。
  • R語言中使用pie函數繪製餅圖
    R語言中餅圖繪製函數在R語言中繪製餅圖的函數為pie,其使用格式如下:pie(x, labels = names(x), edges = 200, radius = 0.8,clockwise = FALSE, init.angle = if(clockwise) 90 else 0,density = NULL, angle = 45, col = NULL
  • ARM中ADS環境下C語言和彙編語言混合編程及示例
    下面是一個C語言和彙編語言共享全局變量的例子:  C語言文件.c  #include stdio.h  int gVar=12;  extern asmDouble(void);  int main(){  printf(original value of gVar is %d, gVar_1);
  • C語言中函數的形參與實參是什麼?
    函數的參數分為形參和實參兩種形參出現:1、在函數定義中,在整個函數體內都可以使用,離開該函數則不能使用。2、實參出現在主調函數中,進入被調函數後,實參變量也不能使用。因此在函數調用過程中,形參的值發生改變,而實參中的值不會變化。形式參數就是定義函數時候的參數表,只是定義了調用時參數的個數、類型和用來引用的名字,並沒有具體的內容。形參未被調用時,不佔存儲單元。形參只在調用過程中佔用存儲單元。在調用函數時,給形參分配存儲單元,實參不僅是常量、變量或者表達式,且要與形參類型一致!
  • C語言函數的調用 - 百度經驗
    在一個程序的編寫過程中,隨著代碼量的增加,如果把所有的語句都寫到 main 函數中,一方面程序會顯得的比較亂,另外一個方面,當同一個功能需要在不同地方執行時,我們就得再重複寫一遍相同的語句。此時,如果把一些零碎的功能單獨 寫成一個函數,在需要它們時只需進行一些簡單的函數調用,這樣既有助於程序結構的清晰條理,又可以避免大塊的代碼重複。
  • C語言編程:驗證哥德巴赫猜想
    哥德巴赫猜想中寫到,一個充分大的偶數(大於等於6),它可以分解為兩個素數(質數)的和。將輸入的偶數n ,分解為兩個素數的所有可能列印出來。a = b + c(其中a是大於等於6的整數,b和c是素數)這個問題就等價於:對於一個給定的大於等於4的偶數a,怎麼找到素數b和c呢?可以用循環的方法,把b的值從3循環到a-3,那麼對應的c的值就是a-3到3。然後我們分別對每一組的b和c值進行是否是素數的判斷。
  • 剖析C語言中a=a+++a的無聊問題
    因為我想告訴你,細微的一個編譯gcc時使用的編譯選項的差別都有可能導致使用gcc時編譯結果的不一樣。  在Linux系統中,每個軟體基本都是通過三個基本步驟從原始碼到安裝進系統運行的。這三個步驟是:  configure  make  make install  比如configure時的不同選項和參數會決定代碼編譯出來的軟體的不同特徵。好了,這裡不多說這個,言歸正傳。
  • 言C語言陷阱與技巧第21節,函數只能返回一個值嗎?有多個返回值怎麼...
    >上述C語言代碼中,fun() 函數會將最終處理結果 res1 和 res2 存入 a 和 b,利用全局變量的全局可見性,間接的將兩個結果「返回」給 main() 函數。C語言的指針允許程序直接操作內存,所以函數可以將任意多的值放入內存(只要內存夠用),再將這些值的地址和訪問方式告訴調用者,那麼調用者完全可以將這些值從內存中取出,這樣的過程其實就實現了C語言函數「返回」任意多的值。
  • C語言程序設計試題及答案
    A) 程序行 B) 語句 C) 函數 D) 字符2、C語言規定,在一個源程序中main函數的位置( )。A) 必須在最開始 B) 必須在系統調用的庫函數的後面C) 可以任意 D) 必須在最後3、下列符號串中符合C語言語法的標識符是( )。
  • C語言之const和volatile"究極"學習
    const只讀變量:const修飾的變量是只讀的,本質上還是變量const修飾的局部變量在棧上分配空間const修飾的全局變量在全局數據區分配空間const只在編譯期有用,在運行期沒有用註:const修飾的變量不是真的常量,它只是告訴編譯器該變量不能出現在賦值符號的左邊2、const全局變量的分歧:在現代c語言編譯器中
  • 定義只有一個數組成員的C語言結構體有什麼用?
    在C語言程序開發中,有經驗的程式設計師有時會定義只有一個數組成員的結構體,雖然語法簡單,但是卻常常讓初學者感到迷惑:這麼做有什麼好處嗎?struct ABC {unsigned long array[MAX];} abc;
  • 自考「C語言程序設計」模擬試題十四
    2:1  6.一個C程序的執行是從(     )  A.main()函數開始,直到main()函數結束。   B.第一個函數開始,最後一個函數結束。  C.第一個語句開始,最後一個語句結束。  D.main()函數開始,直到最後一個函數。
  • 單片機的C語言中數組的用法
    數組是由數組名來表示的,數組中的數據由特定的下標來唯一確定。引入數組的目的,是使用一塊連續的內存空間存儲多個類型相同的數據,以解決一批相關數據的存儲問題。數組與普通變量一樣,也必須先定義,後使用。數組在C51語言的地位舉足輕重,因此深入地了解數組是很有必要的。下面就對數組進行詳細的介紹。
  • 2003年10月甘肅省高等教育自學考試C語言程序設計試卷
    )  Csize of(float)  Dsize of(int)+size of(char)+size of(float)  7.若fp是指向某文件的指針,且feof(fp)的返回值是非零值,則表示  ()  A已讀到此文件末尾 B未讀到此文件的末尾  C此文件已關閉 D此文件尚未被打開  8.以下c語言函數聲明中