999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C語言函數(shù)參數(shù)傳遞規(guī)律的探討

2008-04-12 00:00:00楊戰(zhàn)海薛蘇秦張曉光
現(xiàn)代電子技術(shù) 2008年16期

摘 要:函數(shù)是C語言的基本單位,函數(shù)的參數(shù)傳遞采用單向的值傳遞方式。當(dāng)指針作為函數(shù)參數(shù)時(shí),進(jìn)行的是地址傳遞,地址傳遞依然是單向的值傳遞方式,并不是雙向的傳遞方式。使用局部變量的有關(guān)知識(shí),用圖示法分析探討函數(shù)的各種參數(shù)傳遞形式,通過探討,總結(jié)了函數(shù)的參數(shù)傳遞規(guī)律。圖示分析方法是一種全新的分析工具,有一定的推廣價(jià)值。

關(guān)鍵詞:值傳遞;地址傳遞;局部變量;圖示法

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1004373X(2008)1608903

Discussion of Parameter Delivery Law Based on C Language Function

YANG Zhanhai,XUE Suqin,ZHANG Xiaoguang

(Computer Center,Yan′an Unversity,Yan′an,716000,China)

Abstract:The function is basical unit of C language,the function parameter delivery adopts transfer way of oneway value.While guiding principle is the function parameter,being in progress is address delivery,as before,address delivery is oneway value transfer way,is really not twoway delivery way.Using relevant part variable knowledge,the various parameter using diagrammatic representation is discussed.By discussion,parameter′s dilivery law of the function is proposed.Graphic analysis method in culture is a kind of brandnew analysis implement,has certain extension value.

Keywords:value delivery;address delivery;part variable;diagrammatic representation metrod

學(xué)習(xí)和使用C語言,都會(huì)遇到函數(shù)的參數(shù)傳遞問題,在編寫的一些程序里,主調(diào)函數(shù)調(diào)用了被調(diào)用函數(shù)后,主調(diào)函數(shù)中的有些變量發(fā)生了變化,尤其是在使用指針的情況下更是如此,基于此點(diǎn),有人誤以為,指針作為函數(shù)參數(shù)時(shí)的地址傳遞是雙向的傳遞方式。

本文以局部變量的概念為基石,采用一種內(nèi)存圖示分析方法。使用該方法,探討了函數(shù)的各種參數(shù)傳遞形式,對(duì)參數(shù)的傳遞規(guī)律進(jìn)行深刻的總結(jié)。

1 自動(dòng)局部變量

自動(dòng)局部變量是函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的auto類別的變量,該變量在內(nèi)存的動(dòng)態(tài)區(qū)中開辟,作用范圍僅限于函數(shù)內(nèi)部或復(fù)合語句內(nèi)部,只有函數(shù)或復(fù)合語句能夠識(shí)別自己的自動(dòng)局部變量,即自動(dòng)局部變量對(duì)于其他函數(shù)而言是不可知的、不可見的。

另外,自動(dòng)局部變量的生存期也是非常短暫的,當(dāng)其所在函數(shù)被調(diào)用時(shí),分配內(nèi)存單元,調(diào)用結(jié)束后,釋放變量。在下次調(diào)用函數(shù)時(shí),重新分配內(nèi)存單元。

形式參數(shù)屬于局部變量,作用范圍僅在所定義的函數(shù)中,形參的變化不能被別的函數(shù)可見,包括主調(diào)函數(shù)也不可見。若形式參數(shù)為自動(dòng)局部變量,調(diào)用結(jié)束后根本就不存在了,更不會(huì)被主調(diào)函數(shù)可見。

按照上面的分析,形參絕不可能把自己調(diào)用到主調(diào)函數(shù)里的,所以,函數(shù)的參數(shù)的傳遞應(yīng)該是單向的。

既然局部變量互不干擾,為簡(jiǎn)單起見,可以把主調(diào)函數(shù)和被調(diào)用函數(shù)的變量畫在不同的區(qū)域以示區(qū)別。為此,特約定,畫內(nèi)存圖時(shí)以水平線為分界,水平線以下為主調(diào)函數(shù)的局部變量,水平線以上為被調(diào)用函數(shù)的局部變量。

下面,便應(yīng)用以上理論和畫圖的方法分析幾個(gè)典型的程序,用以研究函數(shù)的參數(shù)傳遞規(guī)律。

2 不涉及指針的參數(shù)傳遞

有如下程序,用于交換2個(gè)變量的值。交換的思想是把實(shí)參變量傳遞給形參變量后,交換形參變量的值,希望帶動(dòng)2個(gè)實(shí)參變量的值的改變。

void fun(int a,int b)

{ int t; t = a; a = b; b = t;}

void main(viod)

{ int a = 6,b = 9; fun(a,b); printf (\"%d,%d\\\\",a,b);}

但程序的執(zhí)行結(jié)果并未實(shí)現(xiàn)實(shí)參變量值的交換,這說明形參的變化不能影響實(shí)參的值,傳遞是單向值傳遞的。

下面,便用圖示法進(jìn)行分析探討。

主程序執(zhí)行后,變量及其值如圖1(a)所示。調(diào)用函數(shù)fun后,分配的變量及其值如圖1(b)所示,此時(shí)形參從實(shí)參處獲得了對(duì)應(yīng)的值。

函數(shù)fun中的變量交換,是局部變量的交換,交換結(jié)果如圖2(a)所示。函數(shù)fun調(diào)用結(jié)束后,釋放其所申請(qǐng)的局部變量,結(jié)果如圖2(b)所示。

顯而易見,形參的變化是被調(diào)用函數(shù)內(nèi)部的變化,根本不涉及實(shí)參的變化,值的單向傳遞得到肯定。

3 涉及指針的參數(shù)傳遞

3.1 指針形參的改變

下面的程序采用指針參數(shù),函數(shù)fun進(jìn)行2個(gè)指針參數(shù)變量的值的交換。

void fun(int *p,int *q)

{ int *t; t=p; p=q; q=t;}

void main(void)

{ int a=6,b=9,*p=a,*q=b;

fun(p,q); printf (\"%d,%d\\\\",a,b);}

主程序執(zhí)行后,變量及其值如圖3(a)所示,實(shí)參指針p的值為a,表示指向變量a,實(shí)參指針q的值為b,表示指向變量b。調(diào)用函數(shù)fun后,分配的變量及其值如圖3(b)所示,此時(shí)形參從實(shí)參處獲得了對(duì)應(yīng)的值,其中形參指針p的值為a,表示指向主調(diào)函數(shù)中的變量a,實(shí)參指針q的值為b,表示指向主調(diào)函數(shù)中的變量b。

函數(shù)fun中的p和q交換,是局部變量的交換,交換結(jié)果如圖4(a)所示,p指向了b,q指向了a。函數(shù)fun調(diào)用結(jié)束后,釋放其所申請(qǐng)的局部變量,結(jié)果如圖4(b)所示。

主函數(shù)中p和q是實(shí)參,而調(diào)用函數(shù)fun后,p和q沒有發(fā)生改變,這說明形參的變化沒有改變實(shí)參的指向,即沒有改變實(shí)參的值,指針作參數(shù)時(shí),值的單向傳遞得到了肯定。另外,形參指針p和q曾分別指向主函數(shù)中a和b,而主函數(shù)中a和b也沒有發(fā)生改變,這說明,僅改變形參指針的值,不會(huì)影響主調(diào)函數(shù)中其他變量的值,不能改變其指向變量的值。

3.2 指針形參指向變量的改變

下面的程序采用指針參數(shù),函數(shù)fun進(jìn)行2個(gè)指針參數(shù)指向變量的值的交換。

void fun(int *p,int *q)

{ int t; t=*p; *p=*q; *q=t;}

void main(void)

{ int a=6,b=9,*p=a,*q=b;

fun(p,q); printf (\"%d,%d\\\\",a,b);}

主程序執(zhí)行后,變量及其值如圖5(a)所示,實(shí)參指針p指向變量a,實(shí)參指針q指向變量b。調(diào)用函數(shù)fun后,分配的變量及其值如圖5(b)所示,此時(shí)形參從實(shí)參處獲得對(duì)應(yīng)的值,其中形參指針p指向主調(diào)函數(shù)中的變量a,實(shí)參指針q指向主調(diào)函數(shù)中的變量b。

函數(shù)fun中的*p和*q交換,就是主調(diào)函數(shù)中的變量a和b的交換,交換結(jié)果如圖6(a)所示,主調(diào)函數(shù)中的變量a和b完成了交換。函數(shù)fun調(diào)用結(jié)束后,釋放其所申請(qǐng)的局部變量,結(jié)果如圖6(b)所示。

通過指針形參可以改變其指向變量的值,變量可以是主調(diào)函數(shù)中變量,但這些變量并不是實(shí)參指針變量,實(shí)參的值沒有發(fā)生改變。所以通過指針形參可以改變其指向變量的值并不違背參數(shù)的單向傳遞規(guī)律。

3.3 數(shù)組名作為函數(shù)的參數(shù)

數(shù)組名是地址常量,代表函數(shù)的起始地址,即數(shù)組名是指針類型常量,指向了數(shù)組的起始位置。按照參數(shù)的類型一致原則,形參就應(yīng)該為指針類型變量,該變量得到實(shí)參的傳遞后,指針指向數(shù)組的起始位置。

故數(shù)組名作為函數(shù)的參數(shù)本質(zhì)是指針作參數(shù)的情形,實(shí)際上就是圖5(a),(b)描述的情形。形參指針的變化不會(huì)改變數(shù)組的初始位置,不會(huì)改變數(shù)組名地址常量,指針參數(shù)之間的傳遞遵循單向的值傳遞規(guī)律。形參指針指向的變量就是數(shù)組的內(nèi)存單元,通過形參指針指向的變量的改變可以達(dá)到改變數(shù)組元素值的目標(biāo)。

4 結(jié) 語

C語言函數(shù)參數(shù)的傳遞規(guī)律是單向的傳遞規(guī)律,不論參數(shù)是否是指針,主調(diào)函數(shù)的實(shí)參是不會(huì)改變的。能夠改變的只能是指針指向的變量的改變,在數(shù)組中把這種指針指向的變量的特性稱為共享內(nèi)存單元。指針指向的變量并不是作為實(shí)數(shù)的變量,而是其他的變量,實(shí)參也指向該變量,指向變量的改變并等價(jià)于實(shí)參的改變,地址傳遞并不違背“值傳遞”規(guī)律。

以局部變量的概念為基石,采用內(nèi)存圖示分析方法,是分析和研究參數(shù)傳遞問題的一種新思路、新方法。

參 考 文 獻(xiàn)

[1]古麗孜拉·安尼瓦爾.C語言函數(shù)參數(shù)傳遞的幾個(gè)問題[J].伊犁師范學(xué)院學(xué)報(bào),2004(3):7374.

[2]吳麗賢.C語言中多維數(shù)組指針和遞歸的教學(xué)實(shí)踐[J].電腦知識(shí)與技術(shù):學(xué)術(shù)交流,2007(2):462,464.

[3]張艷華.C語言函數(shù)形參與實(shí)參之間的數(shù)據(jù)傳遞[J].內(nèi)江科技,2007(9):80.

[4][美] Herbert Schildt.最新C語言精華\\.3版.王子恢,譯.北京:電子工業(yè)出版社,1997.

[5]譚浩強(qiáng).C程序設(shè)計(jì)\\.3版.北京:清華大學(xué)出版社,2005.

[6]楊戰(zhàn)海,郭協(xié)潮.基于C語言函數(shù)調(diào)用獲得結(jié)果的分析研究\\.現(xiàn)代電子技術(shù),2007,30(4):102103.

作者簡(jiǎn)介 楊戰(zhàn)海 男,1972出生,陜西涇陽人,講師。主要從事計(jì)算機(jī)算法和數(shù)據(jù)庫技術(shù)方面的研究。

主站蜘蛛池模板: 伊人无码视屏| 国产精品无码久久久久久| 亚洲天堂久久久| 国产成人精品亚洲日本对白优播| 亚洲欧美综合精品久久成人网| 亚洲欧美在线综合图区| 亚洲妓女综合网995久久| 青青草原国产av福利网站| 视频国产精品丝袜第一页| 国产资源免费观看| 国产91精品最新在线播放| 992Tv视频国产精品| 夜精品a一区二区三区| 亚洲Va中文字幕久久一区| 日韩成人高清无码| 亚洲一本大道在线| 亚洲v日韩v欧美在线观看| 色香蕉网站| 亚洲国产中文精品va在线播放 | 欧美日韩国产成人高清视频| 国产精品永久不卡免费视频| 日韩专区第一页| 国产精品视频猛进猛出| 国产成人精品优优av| 极品尤物av美乳在线观看| 992tv国产人成在线观看| 亚洲人成亚洲精品| 欧美天堂久久| 怡红院美国分院一区二区| 亚洲精品视频网| 在线综合亚洲欧美网站| 国产精品手机在线播放| 国产精品尹人在线观看| 国内自拍久第一页| 欧美爱爱网| 色综合激情网| 91色爱欧美精品www| 98精品全国免费观看视频| 国产成人精品2021欧美日韩| 香蕉国产精品视频| 欧美日本视频在线观看| 无遮挡国产高潮视频免费观看 | 精品国产Av电影无码久久久| 浮力影院国产第一页| 久久精品无码国产一区二区三区| 国产成人精品无码一区二 | 日韩国产精品无码一区二区三区| 新SSS无码手机在线观看| 人人爽人人爽人人片| 精品一区国产精品| 久久99久久无码毛片一区二区| 免费国产一级 片内射老| 亚洲天堂网视频| 91香蕉视频下载网站| 国产香蕉国产精品偷在线观看| 中国国产A一级毛片| 亚洲国产欧美国产综合久久 | 国产成人亚洲毛片| 99久久精品久久久久久婷婷| 亚洲电影天堂在线国语对白| 中文字幕日韩欧美| 欧美精品高清| 国产成人久视频免费| 大陆精大陆国产国语精品1024| 在线观看欧美国产| 视频二区亚洲精品| 一级香蕉视频在线观看| 日韩精品亚洲人旧成在线| 久久婷婷国产综合尤物精品| 97综合久久| 国产成人艳妇AA视频在线| 国产欧美日韩另类| 亚洲第一成年免费网站| 成人亚洲国产| 高清无码一本到东京热| 在线免费亚洲无码视频| 五月婷婷欧美| 国产特一级毛片| 毛片手机在线看| 国产午夜无码专区喷水| 波多野结衣久久高清免费| 手机永久AV在线播放|