日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言函数传参详解

發(fā)布時(shí)間:2023/12/2 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言函数传参详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

24.1.普通變量作為函數(shù)形參 (1)普通變量作為參數(shù)在函數(shù)傳參時(shí),形參和實(shí)參名字可以相同也可以不同,實(shí)際上都是用實(shí)參來(lái)替代相應(yīng)的形參的。 (2)在字函數(shù)內(nèi)部,形參的值等于實(shí)參。原因是函數(shù)調(diào)用時(shí)把實(shí)參的值賦值給了形參。這就是所謂的”傳值調(diào)用”,相當(dāng)于實(shí)參做右值,形參做左值。


24.2.數(shù)組和指針作為函數(shù)形參 (1)函數(shù)名作為形參傳參時(shí),實(shí)際傳遞是不是整個(gè)數(shù)組,而是數(shù)組的首元素的首地址。所以在子函數(shù)內(nèi)部,傳進(jìn)來(lái)的數(shù)組名就等于是一個(gè)指向數(shù)組首元素首地址的指針。所以sizeof得到的是4。 (2)在子函數(shù)內(nèi)傳參得到的數(shù)組首元素首地址,和外面得到的數(shù)組首元素首地址是相同的。這就是所謂的”傳址調(diào)用”,即調(diào)用子函數(shù)時(shí)傳了地址,此時(shí)可通過(guò)傳進(jìn)去的地址訪問(wèn)實(shí)參。 (3)數(shù)組名作為函數(shù)形參時(shí),[]里的數(shù)字可有可無(wú)。因?yàn)閿?shù)組名做為形參傳遞的實(shí)際只是個(gè)指針,根本沒(méi)有數(shù)組長(zhǎng)度這個(gè)信息。 (4)指針作為函數(shù)形參時(shí)和數(shù)組作為函數(shù)形參是一樣的.這就好像指針?lè)绞皆L問(wèn)數(shù)組元素和數(shù)組方式訪問(wèn)數(shù)組元素的結(jié)果一樣是一樣的。


24.3.結(jié)構(gòu)體變量作為函數(shù)形參 (1)結(jié)構(gòu)體變量作為函數(shù)形參的時(shí)候,實(shí)際上和普通變量(類(lèi)似于int之類(lèi)的)傳參時(shí)表現(xiàn)是一模一樣的。所以說(shuō)結(jié)構(gòu)體變量其實(shí)也是普通變量而已。 (2)因?yàn)榻Y(jié)構(gòu)體一般都很大,所以如果直接用結(jié)構(gòu)體變量進(jìn)行傳參,那么函數(shù)調(diào)用效率就會(huì)很低。(因?yàn)樵诤瘮?shù)傳參的時(shí)候需要將實(shí)參賦值給形參,所以當(dāng)傳參的變量越大調(diào)用效率就會(huì)越低)。為提高效率,我們可改傳變量的指針(地址)進(jìn)去。 (3)結(jié)構(gòu)體因?yàn)樽陨硖?#xff0c;所以傳參應(yīng)該用指針來(lái)傳(但是程序員可以自己決定,你非要傳結(jié)構(gòu)體變量過(guò)去C語(yǔ)言也是允許的,只是效率低了)。


24.4.傳值調(diào)用與傳址調(diào)用 (1)傳值調(diào)用描述的是這樣一種現(xiàn)象:x和y作為實(shí)參,自己并沒(méi)有真身進(jìn)入swap1函數(shù)內(nèi)部,而只是拷貝了一份自己的副本(副本具有和自己一樣的值,但是是不同的變量)進(jìn)入子函數(shù)swap1,然后我們?cè)谧雍瘮?shù)swap1中交換的實(shí)際是副本而不是x、y真身。所以在swap1內(nèi)部確實(shí)是交換了,但是到外部的x和y根本沒(méi)有受影響。 (2)在swap2中x和y真的被改變了(但是x和y真身還是沒(méi)有進(jìn)入swap2函數(shù)內(nèi),而是swap2函數(shù)內(nèi)部跑出來(lái)把外面的x和y真身改了)。實(shí)際上實(shí)參x和y永遠(yuǎn)無(wú)法真身進(jìn)入子函數(shù)內(nèi)部(進(jìn)去的只能是一份拷貝),但是在swap2我們把x和y的地址傳進(jìn)去給子函數(shù)了,于是乎在子函數(shù)內(nèi)可以通過(guò)指針解引用方式從函數(shù)內(nèi)部訪問(wèn)到外部的x和y真身,從而改變x和y。 (3)結(jié)論:這個(gè)世界上根本沒(méi)有傳值和傳址這兩種方式,C語(yǔ)言本身函數(shù)調(diào)用時(shí)一直是傳值的,只不過(guò)傳的值可以是變量名,也可以是變量的指針。?


24.5.函數(shù)形參和返回值 (1)函數(shù)名是一個(gè)符號(hào),表示整個(gè)函數(shù)代碼段的首地址,其實(shí)質(zhì)是一個(gè)指針常量,所以在程序中使用到函數(shù)名時(shí)都是當(dāng)?shù)刂酚玫?#xff0c;表示調(diào)用該函數(shù)。函數(shù)體是函數(shù)的關(guān)鍵,由一對(duì){}括起來(lái),包含很多句代碼,函數(shù)體就是函數(shù)實(shí)際做的工作。形參列表和返回值,形參是函數(shù)的輸入部分,返回值是函數(shù)的輸出部分。 (2)若沒(méi)有形參列表和返回值,函數(shù)也能對(duì)數(shù)據(jù)進(jìn)行加工,使用全局變量即可。用全局變量來(lái)傳參和用函數(shù)參數(shù)列表返回值來(lái)傳參各有特點(diǎn),在實(shí)踐中都有使用。總的來(lái)說(shuō),函數(shù)參數(shù)傳參用得較多,因?yàn)檫@樣可實(shí)現(xiàn)模塊化編程,而C語(yǔ)言中也是盡量減少使用全局變量。 (3)全局變量傳參最大的好處就是省略了函數(shù)傳參的開(kāi)銷(xiāo),所以效率要高一些;但是實(shí)戰(zhàn)中用的最多的還是函數(shù)傳參,如果參數(shù)很多傳參開(kāi)銷(xiāo)非常大,通常的做法是把很多參數(shù)打包成一個(gè)結(jié)構(gòu)體,然后傳結(jié)構(gòu)體變量指針進(jìn)去。


24.6.函數(shù)傳參中使用const指針 (1)const用來(lái)修飾指針作函數(shù)傳參,就是為了聲明在函數(shù)內(nèi)部不會(huì)改變?cè)撝羔標(biāo)赶虻淖兞俊K越o該函數(shù)傳一個(gè)不可改變的指針(譬如char *p = “l(fā)inux”; 字符串常量,放在代碼段中,不可改變)后,一旦該函數(shù)內(nèi)部試圖更改它時(shí)編譯器會(huì)提示錯(cuò)誤;而一個(gè)未聲明為const指針參數(shù)的函數(shù),我們給該函數(shù)傳一個(gè)不可更改的指針時(shí),一旦該函數(shù)內(nèi)部更改它后,編譯器在編譯過(guò)程中不會(huì)有提示,而是會(huì)在運(yùn)行中導(dǎo)致段錯(cuò)誤。 (2)一般來(lái)說(shuō),函數(shù)的輸入部分就是函數(shù)參數(shù),輸出部分就是返回值。問(wèn)題是函數(shù)的參數(shù)可以有很多個(gè),而返回值只能有一個(gè)。則我們無(wú)法讓一個(gè)函數(shù)返回多個(gè)值。 (3)現(xiàn)實(shí)編程中,一個(gè)函數(shù)需要返回多個(gè)值是非常普遍的,因此完全依賴(lài)于返回值是不靠譜的,通常的做法是用參數(shù)來(lái)做返回(在典型的linux風(fēng)格函數(shù)中,返回值是不用來(lái)返回結(jié)果的,而是用來(lái)返回0或者負(fù)數(shù)用來(lái)表示程序執(zhí)行結(jié)果是對(duì)還是錯(cuò),是成功還是失敗)。 (4)普遍做法,編程中函數(shù)的輸入和輸出都是靠函數(shù)參數(shù)的,返回值只是用來(lái)表示函數(shù)執(zhí)行的結(jié)果是對(duì)(成功)還是錯(cuò)(失敗)。如果這個(gè)參數(shù)是用來(lái)做輸入的,就叫輸入型參數(shù);如果這個(gè)參數(shù)的目的是用來(lái)做輸出的,就叫輸出型參數(shù)。輸出型參數(shù)就是用來(lái)讓函數(shù)內(nèi)部把數(shù)據(jù)輸出到函數(shù)外部的。 (5)總結(jié):函數(shù)傳參如果傳的是普通變量(不是指針)那肯定是輸入型參數(shù);若該函數(shù)形參是指針變量并且加了const,那么就表示這個(gè)參數(shù)是用來(lái)做輸入型參數(shù)的;若該函數(shù)形參是指針變量并且還沒(méi)加const,那么就表示這個(gè)參數(shù)是用來(lái)做輸出型參數(shù)的。譬如C庫(kù)函數(shù)中strcpy函數(shù):char *strcpy(char *dest, const char *src);。

轉(zhuǎn)載于:https://www.cnblogs.com/wentujun/p/7709375.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的c语言函数传参详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。