C的main函式解析

2021-10-12 10:31:22 字數 2034 閱讀 8995

終於開始學習linux的c語言程式設計了嚶嚶嚶,有種終於入門的感動

關於linux中c語言程式設計包括vim、gcc、makefile這些工具的用法這些不是本次的主題,我在這裡就不詳細展開了,本文只闡述一下main函式的引數呼叫問題。

virtualbox 6.1.12,ubuntu 20.04,code::blocks,c

眾所周知,main函式對於系統來說其實也只是乙個普通的函式,它作為乙個介面與系統進行連線,每次系統呼叫main函式生成的程式檔案。而linux系統其實又是通過c語言寫出來的,本質上其實也只是乙個c程式。而呼叫c生成的程式檔案其實就等同於將linux的乙個程式執行指標呼叫這個程式的位址,然後這個程式就執行起來了,而我們可以通過main函式的兩個引數介面在呼叫這個程式的時候進行傳參。

// hello.c,用於測試main引數傳遞

#include

#include

intmain

(int argc,

char

*ar**)

else

printf

("is w/w but not world~\thello %s\n"

, ar**[i]);

// 是w/w但是並非world

break;}

case

'l':

case

'l':

else

printf

("is w/w but not world~\thello %s\n"

, ar**[i]);

// 是l/l但是並非liunx

break;}

default

:printf

("this is %s\n"

, ar**[i]);

break;}

i++}return0;

}

這裡我們可以看到main函式中有兩個引數,分別是int型別的argc和char**型別的ar**兩個引數,當然這兩個引數的名字可以變換,就像普通函式的形參一樣,但是通常大家都用這兩個,相當於約定俗成了。可以看出ar**是乙個指向char陣列的指標陣列的陣列指標,聽上去有點繞,但是用char * ar**應該就比較好理解了,或者說甚至可以直接當成乙個二維陣列,其中第一維是一堆位址,每個位址分別指向乙個char陣列的首位址,而char陣列則構成了第二維。而argc則記錄了其中第一維的指標ar**的個數。

不過值得注意的是,ar**有乙個預設值ar**[0]為程式自身所處位址,比如說如果我們在windows下檢測乙個在d:\code下的test.exe函式,其ar**[0]的值就為:d:\code\test.exe。

我用如下程式進行了測試:

#include

intmain

(int argc,

char

* ar**)

輸出結果如下:

而我們剛才說過argc記錄的ar**的個數,所以同理,我們知道argc的預設值為1。

所以我們其實就可以把*ar** 當成一堆指令,每個指令ar**[i]在傳入到程式中後就是乙個char陣列的形式。用歸類拓展的方式去理解,其實我們平時在cmd中使用的help xx也許其實也相當於是乙個程式,help是函式名而xx則是乙個引數(當然事實上是不是這樣我也不知道,只是做乙個例子便於理解,不過想來相差不大)。

而有了這些認識,我們再看一下上面的程式,就不難理解我的操作了:

在輸出了位址和本次傳入引數個數後,程式將會從我傳入的第乙個引數(也就是ar**[1])開始,一直到最後乙個引數,分別將其作為指令進行判斷,如果為linux或world則輸出hello world,其他指令則以this is xx進行輸出,而如果判斷出首字母為l/l或w/w的指令則會多輸出一句is w/w but not world~\t,最終執行結果如下:

C語言 main函式的引數解析

每個c程式都必須有乙個main函式,main函式又稱為主函式,是執行程式的起點,它被稱之為函式,是否會像平時使用函式時需要自己的引數呢?答案是肯定的,那麼他都有那些引數呢?main函式的在vs2017環境下除錯,可以看到main函式裡的三個引數 可以看到,main函式裡面有三個引數 argc arg...

main函式的引數解析

main函式的引數解析 我們平常寫main函式的時候習慣不帶引數,將其預設為void.但如果我們仔細觀察的話,我們就能發現其實main函式是有引數的。接下來,我們就來了解一下main函式的引數列表。首先main函式的原型為 int main int argc,char argv char envp ...

main函式的引數解析

我們一般寫 的時候都會這樣寫main函式 int main 所以剛開始我們都以為main函式是沒有引數的,然而事實卻不是這樣子的。首先,我們來看看main函式的原型 int main int argc,char argv,char envp 所以main函式是有引數的,而且有三個引數。第乙個引數 a...