c语言 方程改main的值_c语言main函数里的参数argv和argc解析
前言
一般我們平時(shí)寫(xiě)main函數(shù)的話(huà),一般都是寫(xiě)不帶參數(shù)的比較多,而且也習(xí)慣了這樣寫(xiě);其實(shí)標(biāo)準(zhǔn)的形式寫(xiě)法,main函數(shù)是帶兩個(gè)參數(shù)的,這兩個(gè)參數(shù)分別是:argc和argv,那么這兩個(gè)參數(shù)是表示什么意思,怎么用呢?今天就給大家分享main函數(shù)里面這兩個(gè)參數(shù)的使用,下面看到這樣的寫(xiě)法,要明白這樣寫(xiě)的意思哦!
main函數(shù)返回給誰(shuí)
01
函數(shù)為什么需要返回值
函數(shù)在設(shè)計(jì)的時(shí)候設(shè)計(jì)了參數(shù)和返回值,參數(shù)是函數(shù)的輸入,返回值是函數(shù)的輸出。
因?yàn)楹瘮?shù)需要對(duì)外輸出數(shù)據(jù)(實(shí)際上是函數(shù)運(yùn)行的一些結(jié)果值),因此需要返回值。
形式上來(lái)說(shuō),函數(shù)被另外一個(gè)函數(shù)所調(diào)用,返回值作為函數(shù)式的值返回給調(diào)用這個(gè)函數(shù)的地方。
總的來(lái)說(shuō),函數(shù)的返回值就是給調(diào)用的地方返回一個(gè)值。
02
main函數(shù)被誰(shuí)調(diào)用
(1)main函數(shù)是特殊的,首先這個(gè)名字是特殊的;因?yàn)樵赾語(yǔ)言里面規(guī)定了main函數(shù)是整個(gè)程序的入口;其它函數(shù)只有直接或者間接被main函數(shù)所調(diào)用才能被執(zhí)行,如果沒(méi)用被main函數(shù)直接或者間接調(diào)用,則這個(gè)函數(shù)在整個(gè)程序中無(wú)用。(2)main函數(shù)從某種角度來(lái)講,它代表了當(dāng)前這個(gè)程序,或者說(shuō)是整個(gè)程序;main函數(shù)的開(kāi)始意味著整個(gè)程序開(kāi)始執(zhí)行,main函數(shù)的結(jié)束返回意味著整個(gè)程序的結(jié)束。(3)誰(shuí)執(zhí)行了這個(gè)程序,誰(shuí)就調(diào)用了main函數(shù)。03
Linux下一個(gè)程序執(zhí)行的本質(zhì)
(1)表面來(lái)看,Linux中在命令行中去./xx去執(zhí)行一個(gè)可執(zhí)行程序。(2)我們可以通過(guò)shell腳本來(lái)調(diào)用執(zhí)行一個(gè)程序(下面會(huì)寫(xiě)一個(gè)shell腳本)。(3)我們還可以在程序總?cè)フ{(diào)用執(zhí)行一個(gè)程序(fork exec),這個(gè)在Linux應(yīng)用編程里面的文章里面有寫(xiě)過(guò)這個(gè),可以參考這篇文章——Linux系統(tǒng)下進(jìn)程編程之exec族函數(shù)解析(四)(4)我們有多種方法來(lái)執(zhí)行一個(gè)程序,但是本質(zhì)上都是相同的。Linux中一個(gè)新程序的執(zhí)行本質(zhì)上是一個(gè)進(jìn)程的創(chuàng)建、加載、運(yùn)行、消亡。Linux中執(zhí)行一個(gè)程序其實(shí)就是創(chuàng)建一個(gè)新進(jìn)程,然后把這個(gè)程序丟進(jìn)這個(gè)進(jìn)程中去執(zhí)行,直到結(jié)束。新進(jìn)程是被誰(shuí)開(kāi)啟?在Linux中進(jìn)程都是被它的的父進(jìn)程fork出來(lái)的。(5)命令行本身就是一個(gè)進(jìn)程(就是我們平時(shí)在Linux下打開(kāi)一個(gè)終端),在命令行下去./xx執(zhí)行一個(gè)程序,其實(shí)這個(gè)新程序是作為命令行進(jìn)程的一個(gè)子進(jìn)程去執(zhí)行的。總之一句來(lái)說(shuō),一個(gè)程序被它的父進(jìn)程所調(diào)用。(6)小結(jié):main 函數(shù)返回給調(diào)用這個(gè)函數(shù)的父進(jìn)程;父進(jìn)程要這個(gè)這個(gè)返回值干嘛?父進(jìn)程調(diào)用子進(jìn)程來(lái)執(zhí)行一個(gè)任務(wù),然后子進(jìn)程執(zhí)行完后,通過(guò)main函數(shù)的返回值返回給父進(jìn)程一個(gè)答復(fù),這個(gè)答復(fù)一般是表示子進(jìn)程的任務(wù)執(zhí)行結(jié)果完成了還是錯(cuò)誤的(0表示執(zhí)行成功,負(fù)數(shù)時(shí)表示執(zhí)行失敗)。04
實(shí)踐驗(yàn)證獲取main的返回值
(1)用shell腳本執(zhí)行程序可以獲取程序的返回值并且打印出來(lái):??#include???int?main(void){
???????????????????????return?0;
??}
然后我再創(chuàng)建一個(gè)shell腳本:shell腳本里面的內(nèi)容為:??#!/bin/sh
?./a.out
?echo?$?
執(zhí)行結(jié)果為:說(shuō)明:Linux ?shell中用$?這個(gè)符號(hào)來(lái)存儲(chǔ)和表示上一個(gè)程序執(zhí)行結(jié)果(這里就是./a.out)。#!/bin/sh這個(gè)書(shū)寫(xiě)shell腳本的格式。
argc、argv
01
main的書(shū)寫(xiě)形式
一般正規(guī)main函數(shù)的書(shū)寫(xiě)形式有三種:?int?main(void)int?main(int?argc,?char?**argv)int?main(int?argc,?char?*argv[])02
誰(shuí)給main函數(shù)傳參
(1)調(diào)用main函數(shù)所在的程序的它的父進(jìn)程給main函數(shù)傳參,并且接收main的返回值。03
為什么要給main函數(shù)傳參
(1)首先,main函數(shù)不傳參是可以的,也就是說(shuō)父進(jìn)程調(diào)用子進(jìn)程并且給子進(jìn)程傳參不是必須的;int main(void)這種形式就是不要傳參了。(2)有時(shí)候我們希望程序有一種靈活性,所以選擇在執(zhí)行程序時(shí)通過(guò)傳參來(lái)控制程序中的運(yùn)行,達(dá)到不需要重新編譯程序就可以改變程序運(yùn)行結(jié)果的效果。下面我先一個(gè)簡(jiǎn)單的程序?yàn)槔齺?lái)引出這個(gè)程序的靈活性:我們可以看到如果要改程序里面的內(nèi)容的話(huà),必須得修改源代碼才行,這樣靈活不是很好。下面就是我們要講的,給main函數(shù)傳參,來(lái)提高程序的靈活性。04
給main怎樣來(lái)傳參
(1)給main傳參通過(guò)argc和argv這兩個(gè)c語(yǔ)言預(yù)訂的參數(shù)一起實(shí)現(xiàn)。(2)argc是int類(lèi)型的,表示運(yùn)行程序的時(shí)候給main函數(shù)傳遞了幾個(gè)參數(shù);而argv是一個(gè)字符串?dāng)?shù)組,這個(gè)數(shù)組用來(lái)存儲(chǔ)多個(gè)字符串,每個(gè)字符串就是我們給main函數(shù)傳的一個(gè)參數(shù),argv[0]就是我們給main函數(shù)的第一個(gè)傳參,argv[1]就是傳給main的第二個(gè)參數(shù),以此類(lèi)推后面的傳參。運(yùn)行結(jié)果:然后我在執(zhí)行程序的時(shí)候,可以加參數(shù):注意: (1)main函數(shù)傳參都是通過(guò)字符串傳進(jìn)去。 (2)程序被調(diào)用時(shí)傳參,各個(gè)參數(shù)之間是通過(guò)空格來(lái)間隔的。 (3)在程序內(nèi)部如果要使用argv,那么最好先檢查一下argc。總結(jié)今天的分享就到這里結(jié)束了,關(guān)于shell腳本的教程,后面也會(huì)專(zhuān)門(mén)寫(xiě)一系列的文章來(lái)講的。
關(guān)注公眾號(hào),每周分享至少3篇開(kāi)源技術(shù)干貨,文章中如有沒(méi)看懂的地方可以私聊我,我看到了會(huì)立馬回復(fù)你,個(gè)人微信號(hào):a18879499804,在看的話(huà),幫忙點(diǎn)個(gè)贊,非常感謝!
總結(jié)
以上是生活随笔為你收集整理的c语言 方程改main的值_c语言main函数里的参数argv和argc解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WCF揭秘学习笔记(5):WF定制活动
- 下一篇: BindeService