国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C 語言中函數(shù)的參數(shù)傳遞

2020-10-09 07:13:08秦玉平冷強奎李祥納
關(guān)鍵詞:函數(shù)調(diào)用存儲單元數(shù)組

秦玉平,冷強奎,李祥納

(1.渤海大學(xué) 工學(xué)院,遼寧 錦州121013;2.渤海大學(xué) 信息科學(xué)與技術(shù)學(xué)院,遼寧 錦州121013;3.北京國電通網(wǎng)絡(luò)技術(shù)有限公司,北京100761)

關(guān)鍵字:C語言;函數(shù);參數(shù)傳遞;傳遞規(guī)則

0 引言

C語言是一種功能強大且得到廣泛應(yīng)用的計算機高級語言[1].C語言是高校理工科專業(yè)的必修課程,主要培養(yǎng)學(xué)生C語言應(yīng)用能力和程序設(shè)計能力[2,3].

一個C程序由一個或多個文件構(gòu)成,每個文件由一個或多個函數(shù)構(gòu)成,每個函數(shù)完成一個特定的功能,函數(shù)是構(gòu)成C程序的基本單位.依據(jù)函數(shù)關(guān)系,函數(shù)分為主調(diào)函數(shù)和被調(diào)函數(shù).依據(jù)函數(shù)形式,函數(shù)分為無參函數(shù)和有參函數(shù).

在調(diào)用有參函數(shù)時,主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞,數(shù)據(jù)傳遞通過函數(shù)的參數(shù)傳遞實現(xiàn).函數(shù)參數(shù)何時傳遞數(shù)據(jù)、函數(shù)參數(shù)怎樣傳遞數(shù)據(jù)、函數(shù)參數(shù)傳遞的是什么數(shù)據(jù)以及如何訪問參數(shù)傳遞的數(shù)據(jù),是學(xué)習(xí)者學(xué)習(xí)C語言函數(shù)時的難點,只有學(xué)懂弄通這些問題,才能編寫出高質(zhì)量功能函數(shù).為使學(xué)習(xí)者能夠快速、熟練掌握函數(shù)參數(shù)傳遞,依據(jù)計算機程序設(shè)計教學(xué)方法[4,5],本文對每一種類型參數(shù)的傳遞時間、傳遞操作、傳遞內(nèi)容和數(shù)據(jù)操作分別闡述,并通過實例進行詳細解析.

1 參數(shù)傳遞規(guī)則

C語言中,定義函數(shù)時的參數(shù)稱為形式參數(shù),簡稱形參,調(diào)用函數(shù)時的參數(shù)稱為實際參數(shù),簡稱實參.形參是變量,每個形參前面有類型說明符.實參可以是常量、變量和表達式,實參前面沒有類型說明符.函數(shù)調(diào)用開始,為形參分配存儲單元,函數(shù)調(diào)用結(jié)束,釋放形參占用的存儲單元.參數(shù)傳遞是單向的賦值運算,即實參的值依次對應(yīng)地傳遞給形參,但形參不能反傳給實參.參數(shù)傳遞的“值”可以是數(shù)值,也可以是地址,即參數(shù)傳遞有傳值和傳址兩種方式.形參與實參的數(shù)據(jù)類型要一致,否則賦值非法或按不同類型數(shù)值的賦值規(guī)則自動進行類型轉(zhuǎn)換.

2 參數(shù)類型及傳遞方式

C語言的數(shù)據(jù)類型有基本類型、構(gòu)造類型、指針類型和空類型四種.其中,基本類型包括整型、實型、字符型和枚舉型.構(gòu)造類型包括數(shù)組、結(jié)構(gòu)體和共用體.

2.1 基本類型數(shù)據(jù)作函數(shù)參數(shù)

基本類型數(shù)據(jù)作函數(shù)參數(shù)時,參數(shù)傳遞是傳值方式,形參和實參占用各自的存儲單元,對形參值的修改不會影響實參值.

【例1】基本類型數(shù)據(jù)作為函數(shù)參數(shù)舉例.

例1中,函數(shù)fun1的功能是交換形參a、b的值.函數(shù)調(diào)用開始,為形參a、b分配存儲單元,同時進行參數(shù)傳遞,即a=x、b=y,見圖1.函數(shù)fun1中對形參a、b值的修改,沒有影響實參a、b的值.

2.2 基本類型指針作函數(shù)參數(shù)

基本類型指針作函數(shù)參數(shù)時,參數(shù)傳遞是傳址方式,實參和實參指向同一對象,修改形參指向變量的值就是修改實參指向變量的值.利用指針引用所指向的變量的方式是“*指針變量”.

【例2】基本類型指針作函數(shù)參數(shù)舉例.

例2中,函數(shù)fun2的功能是交換形參a指向變量和b指向變量的值.函數(shù)調(diào)用開始,為形參a、b分配存儲單元,同時進行參數(shù)傳遞,即a=&x、b=&y,見圖2.此時,*a就是x,*b就是y,交換*a、*b的值,即交換變量x、y的值.

在程序設(shè)計時,利用基本類型指針作函數(shù)的參數(shù),可以通過一次函數(shù)調(diào)用得到多個結(jié)果.

2.3 一維數(shù)組作函數(shù)參數(shù)

一維基本類型數(shù)組、一維結(jié)構(gòu)體數(shù)組、一維共用體數(shù)組和一維指針數(shù)組都可作為函數(shù)的參數(shù).一維數(shù)組名代表數(shù)組在內(nèi)存中的起始地址,一維數(shù)組作為函數(shù)參數(shù)時,參數(shù)傳遞是傳址方式.由于一維數(shù)組名是常量,不能對其進行賦值運算,編譯系統(tǒng)將一維數(shù)組說明格式的形參轉(zhuǎn)換為指向數(shù)組元素的指針說明格式.函數(shù)調(diào)用時傳遞給形參的是數(shù)組的首地址,即形參數(shù)組與實參數(shù)組為同一個數(shù)組.

例3中,函數(shù)fun3的功能是交換數(shù)組第一個元素和最后元素的值.編譯時編譯系統(tǒng)將函數(shù)fun3中的形參說明“int x[]”轉(zhuǎn)換為“int*x”.函數(shù)調(diào)用開始,為形參x分配存儲單元,同時進行參數(shù)傳遞,即x=a,見圖3.此時,x[i]與a[i](0≤i≤N-1)表示同一數(shù)組元素,對形參數(shù)組x操作等同于對實參數(shù)組a操作.

2.4 二維數(shù)組作函數(shù)參數(shù)

二維基本類型數(shù)組、二維結(jié)構(gòu)體數(shù)組、二維共用體數(shù)組和二維指針數(shù)組都可作為函數(shù)的參數(shù).C語言對二維數(shù)組的處理方法是將其分解成多個一維數(shù)組,即將每一行看作一個一維數(shù)組,并按行存儲.二維數(shù)組的數(shù)組名代表數(shù)組在內(nèi)存中的起始地址,二維數(shù)組作為函數(shù)參數(shù)時,參數(shù)傳遞是傳址方式.由于二維數(shù)組名是常量,不能對其進行賦值運算,編譯系統(tǒng)將二維數(shù)組說明格式的形參轉(zhuǎn)換為指向一維數(shù)組的指針說明格式.調(diào)用函數(shù)時傳遞給形參的是數(shù)組的首地址,即形參數(shù)組與實參數(shù)組是同一個數(shù)組.

【例4】二維數(shù)組作為函數(shù)參數(shù)舉例.

例4中,函數(shù)fun4的功能是互換二維數(shù)組最大值與最小值的位置.編譯時編譯系統(tǒng)將函數(shù)fun4中的形參說明“int x[M][N]”轉(zhuǎn)換為“int(*x)[N]”.函數(shù)調(diào)用開始,為形參x分配存儲單元,同時進行參數(shù)傳遞,即x=a,見圖4.此時,x[i][j]與a[i][j](0≤i≤M-1,0≤j≤N-1)表示同一數(shù)組元素,對形參數(shù)組x操作等同于對實參數(shù)組a操作.

2.5 結(jié)構(gòu)體(或共用體)類型數(shù)據(jù)作函數(shù)參數(shù)

結(jié)構(gòu)體類型數(shù)據(jù)和共用體類型數(shù)據(jù)都可作函數(shù)的參數(shù),但實參也必須是變量,其原因是共用體變量不能初始化,結(jié)構(gòu)體變量除初始化外不能整體賦值.結(jié)構(gòu)體和共用體變量作函數(shù)參數(shù)時,參數(shù)傳遞是傳值方式,參數(shù)傳遞形式是一個賦值運算,實際是多個賦值運算,即將實參各成員的值依次賦給形參的相應(yīng)成員.由于形參和實參占用各自的存儲單元,所以對形參值的修改不會影響實參.

【例5】結(jié)構(gòu)體變量作為函數(shù)參數(shù)舉例.

例5中,函數(shù)fun5的功能是輸出結(jié)構(gòu)體變量x各成員的值.函數(shù)調(diào)用開始,為形參x分配存儲單元,同時進行參數(shù)傳遞,即x=a(x.c=a.c,x.h=a.h,scrcpy(x.str,a.str)),見圖5.

2.6 結(jié)構(gòu)體(或共用體)指針作函數(shù)參數(shù)

結(jié)構(gòu)體(或共用體)指針作函數(shù)參數(shù)時,參數(shù)傳遞是傳址方式,實參和實參指向同一變量,修改形參指向變量的成員值就是修改實參指向變量的成員值.利用結(jié)構(gòu)體(或共用體)指針變量引用結(jié)構(gòu)體變量成員的方式是“指針變量->成員”或“(*指針變量).成員”.

【例6】結(jié)構(gòu)體指針作為函數(shù)參數(shù)舉例.

例6中,函數(shù)fun6的功能是輸出指針變量x指向變量的各成員的值.函數(shù)調(diào)用開始,為形參x分配存儲單元,同時進行參數(shù)傳遞,即x=a,見圖6.此時,是用指針變量x引用變量a的成員.

另外,結(jié)構(gòu)體、共用體的成員和數(shù)組元素都可作為函數(shù)的參數(shù),傳遞方式和數(shù)據(jù)處理與同類型的數(shù)據(jù)相同.

3 結(jié)論

在調(diào)用有參函數(shù)時,先為形參分類存儲單元,同時進行參數(shù)傳遞,然后再執(zhí)行規(guī)定的操作.函數(shù)參數(shù)傳遞規(guī)則是將實參表達式的值依次對應(yīng)地傳給形參表中的各形參變量,即參數(shù)傳遞是單向的賦值運算.參數(shù)傳遞信息有兩種,一種是數(shù)值,另一種是地址.傳值時,對應(yīng)的形參是基本類型、結(jié)構(gòu)體類型或共用體類型的變量,在被調(diào)函數(shù)中對形參的操作,不會影響到主調(diào)函數(shù)中的實參值.傳址時,對應(yīng)的形參是指針變量,此時,實參和形參指向同一個對象,在被調(diào)函數(shù)中可利用形參修改和訪問實參指向的對象.傳址常用于兩種情況,一是通過一次函數(shù)調(diào)用帶回多個值,二是在被調(diào)函數(shù)中修改主調(diào)函數(shù)中某些變量的值.

猜你喜歡
函數(shù)調(diào)用存儲單元數(shù)組
一種28 nm工藝下抗單粒子翻轉(zhuǎn)SRAM的12T存儲單元設(shè)計
JAVA稀疏矩陣算法
電腦報(2022年13期)2022-04-12 00:32:38
基于C語言的數(shù)學(xué)菜單的設(shè)計與實現(xiàn)
JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
電腦報(2020年24期)2020-07-15 06:12:41
數(shù)據(jù)在計算機內(nèi)存中的存儲形式及實驗驗證
基于函數(shù)調(diào)用序列模式和函數(shù)調(diào)用圖的程序缺陷檢測方法*
探討C++編程中避免代碼冗余的技巧
Unity3D項目腳本優(yōu)化分析與研究
中國新通信(2017年1期)2017-03-08 03:12:21
一種成本更低的全新靜態(tài)DRAM存儲單元
MiR-125a-5p is Upregulated in Plasma of Residents from An Electronic Waste Recycling Site
浑源县| 棋牌| 常德市| 大渡口区| 南京市| 贵南县| 永定县| 通海县| 焉耆| 广昌县| 沈阳市| 宁德市| 南部县| 陆良县| 大同县| 闽侯县| 桑植县| 汝阳县| 富源县| 郑州市| 巨鹿县| 怀集县| 普兰店市| 安国市| 綦江县| 保德县| 上高县| 延安市| 娄烦县| 富民县| 普陀区| 玉屏| 双桥区| 中阳县| 龙山县| 定边县| 汉沽区| 沙湾县| 百色市| 汝州市| 乐平市|