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