最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【零基礎(chǔ)學(xué)C語(yǔ)言】知識(shí)總結(jié)十:指針做函數(shù)參數(shù),指針做函數(shù)返回類型

2022-10-15 16:09 作者:C語(yǔ)言編程__Plus  | 我要投稿

指針做函數(shù)參數(shù),指針做函數(shù)返回類型

有時(shí)候我們可以使用函數(shù)的返回值來(lái)回傳數(shù)據(jù),在簡(jiǎn)單的情況下是可以的,但是如果返回值有其它用途(例如返回函數(shù)的執(zhí)行狀態(tài)量),或者要回傳的數(shù)據(jù)不止一個(gè),返回值就解決不了了,所以要引用上指針來(lái)傳遞。


指針做函數(shù)參數(shù):

在C語(yǔ)言中,函數(shù)的參數(shù)不僅可以是整數(shù)、小數(shù)、字符等具體的數(shù)據(jù),還可以是指向它們的指針。用指針變量作函數(shù)參數(shù)可以將函數(shù)外部的地址傳遞到函數(shù)內(nèi)部,使得在函數(shù)內(nèi)部可以訪問(wèn)到函數(shù)外部的數(shù)據(jù),并且這些數(shù)據(jù)不會(huì)隨著函數(shù)的結(jié)束而被銷毀。像數(shù)組、字符串、動(dòng)態(tài)分配的內(nèi)存等都是一系列數(shù)據(jù)的集合,沒(méi)有辦法通過(guò)一個(gè)參數(shù)全部傳入函數(shù)內(nèi)部,只能傳遞它們的指針,在函數(shù)內(nèi)部通過(guò)指針來(lái)影響這些數(shù)據(jù)集合。有的時(shí)候,對(duì)于整數(shù)、小數(shù)、字符等基本類型數(shù)據(jù)的操作也必須要借助指針,一個(gè)典型的例子就是交換兩個(gè)變量的值:

利用指針:

用數(shù)組做函數(shù)參數(shù):

如果一個(gè)函數(shù)按值傳遞數(shù)組,則必須分配足夠的空間來(lái)存儲(chǔ)原數(shù)組的副本,然后把原數(shù)組的所有數(shù)組拷貝到新的數(shù)組中去,如果把數(shù)組的地址傳遞給函數(shù),讓函數(shù)來(lái)直接處理原來(lái)數(shù)組則效率要高。

但是 傳遞地址的時(shí)候,總會(huì)導(dǎo)致一些問(wèn)題,C通常安值傳遞數(shù)據(jù),因?yàn)檫@樣做可以保證數(shù)據(jù)的完整性,如果函數(shù)使用的是原始的數(shù)組的副本,就不會(huì)發(fā)生修改原始數(shù)據(jù),但是,處理數(shù)組的函數(shù)通常都需要使用原始數(shù)據(jù),因此這樣的函數(shù)可以修改原數(shù)組,有時(shí),這正是我們需要的:void add(double a[ ],int n,int b);? 調(diào)用此函數(shù),將可以將原來(lái)數(shù)組的值進(jìn)行修改,也可以說(shuō)是函數(shù)通過(guò)指針,直接將原數(shù)組做修改了

數(shù)組是一系列數(shù)據(jù)的集合,無(wú)法通過(guò)參數(shù)將它們一次性傳遞到函數(shù)內(nèi)部,如果希望在函數(shù)內(nèi)部操作數(shù)組,必須傳遞數(shù)組指針。下面的例子定義了一個(gè)函數(shù) max(),用來(lái)查找數(shù)組中值最大的元素:

C語(yǔ)言為什么不允許直接傳遞數(shù)組的所有元素,而必須傳遞數(shù)組指針呢?

參數(shù)的傳遞本質(zhì)上是一次賦值的過(guò)程,賦值就是對(duì)內(nèi)存進(jìn)行拷貝。所謂內(nèi)存拷貝,是指將一塊內(nèi)存上的數(shù)據(jù)復(fù)制到另一塊內(nèi)存上。

對(duì)于像 int 等基本類型的數(shù)據(jù),它們占用的內(nèi)存往往只有幾個(gè)字節(jié),對(duì)它們進(jìn)行內(nèi)存拷貝非??焖?。而數(shù)組是一系列數(shù)據(jù)的集合,數(shù)據(jù)的數(shù)量沒(méi)有限制,可能很少,也可能成千上萬(wàn),對(duì)它們進(jìn)行內(nèi)存拷貝有可能是一個(gè)漫長(zhǎng)的過(guò)程,會(huì)嚴(yán)重拖慢程序的效率,為了防止技藝不佳的程序員寫出低效的代碼,C語(yǔ)言沒(méi)有從語(yǔ)法上支持?jǐn)?shù)據(jù)集合的直接賦值。

指針的函數(shù)返回類型:

程序編譯后,每個(gè)函數(shù)都有執(zhí)行第一條指令的地址即首地址,稱[函數(shù)指針。函數(shù)指針即指向函數(shù)的指針變量,要間接調(diào)用函數(shù)可以使用指針變量來(lái)實(shí)現(xiàn)。

int?(*pf)(int,?int);

通過(guò)將pf與括號(hào)中的“*”強(qiáng)制組合組合在一起,表示定義的pf是一個(gè)指針,然后與下面的“()”再次組合,表示的是該指針指向一個(gè)函數(shù),括號(hào)里表示為int類型的參數(shù),最后與前面的int組合,此處int表示該函數(shù)的返回值。因此,pf是指向函數(shù)的指針,該函數(shù)的返回值為int。函數(shù)指針與返回指針的函數(shù)的含義大不相同。函數(shù)指針本身是一個(gè)指向函數(shù)的指針。指針函數(shù)本身是一個(gè)返回值為指針的函數(shù)。

? ? ? ?用指針作為函數(shù)返回值時(shí)需要注意的一點(diǎn)是,函數(shù)運(yùn)行結(jié)束后會(huì)銷毀在它內(nèi)部定義的所有局部數(shù)據(jù),包括局部變量、局部數(shù)組和形式參數(shù),函數(shù)返回的指針請(qǐng)盡量不要指向這些數(shù)據(jù),C語(yǔ)言沒(méi)有任何機(jī)制來(lái)保證這些數(shù)據(jù)會(huì)一直有效,它們?cè)诤罄m(xù)使用過(guò)程中可能會(huì)引發(fā)運(yùn)行時(shí)錯(cuò)誤 ,? 但是,這里所謂的銷毀并不是將局部數(shù)據(jù)所占用的內(nèi)存全部抹掉,而是程序放棄對(duì)它的使用權(quán)限,棄之不理,后面的代碼可以隨意使用這塊內(nèi)存 , 如果使用及時(shí)也能夠得到正確的數(shù)據(jù),如果有其它函數(shù)被調(diào)用就會(huì)覆蓋這塊內(nèi)存,得到的數(shù)據(jù)就失去了意義。而覆蓋它的究竟是一份什么樣的數(shù)據(jù)我們無(wú)從推斷(一般是一個(gè)沒(méi)有意義甚至有些怪異的值)。

還應(yīng)該注意函數(shù)指針變量的調(diào)用:

分析函數(shù)指針變量不能進(jìn)行算術(shù)運(yùn)算,這是與數(shù)組指針變量不同的。數(shù)組指針變量加減一個(gè)整數(shù)可使指針移動(dòng)指向后面或數(shù)組元素,而函數(shù)指針的移動(dòng)是毫無(wú)意義的。函數(shù)調(diào)用中“(* 指針變量名)”的兩邊的括號(hào)不可少,其中的“*”不應(yīng)該理解為求值運(yùn)算,在此處只是一種表示符號(hào)。要把“z= * pomax(x,y);”改成“z=(*pomax)(x,y);”。

希望對(duì)大家有幫助!

作者:Mr_Li_

對(duì)啦對(duì)啦!另外的話為了幫助大家,輕松,高效學(xué)習(xí)C語(yǔ)言/C++,我給大家分享我收集的資源,從最零基礎(chǔ)開(kāi)始的教程到C語(yǔ)言項(xiàng)目案例,幫助大家在學(xué)習(xí)C語(yǔ)言的道路上披荊斬棘!可以來(lái)我粉絲群領(lǐng)取哦~

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)最重要的是你可以在群里面交流提問(wèn)編程問(wèn)題哦!

編程學(xué)習(xí)書籍分享:


【零基礎(chǔ)學(xué)C語(yǔ)言】知識(shí)總結(jié)十:指針做函數(shù)參數(shù),指針做函數(shù)返回類型的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
桂东县| 松原市| 福贡县| 舞钢市| 孟村| 大渡口区| 若尔盖县| 公主岭市| 孟州市| 夏津县| 克山县| 台北县| 西畴县| 资中县| 四会市| 綦江县| 汾西县| 鄂尔多斯市| 滨州市| 桐梓县| 和田县| 营口市| 卓尼县| 太仆寺旗| 铅山县| 平乡县| 郸城县| 抚顺市| 特克斯县| 新安县| 南溪县| 马公市| 敦化市| 双流县| 静海县| 乡城县| 孙吴县| 鹤庆县| 石阡县| 尚义县| 贡山|