C語言函數(shù)參數(shù)詳解之實(shí)際參數(shù)(實(shí)參)&形式參數(shù)(形參)詳解
這篇文章我們一起學(xué)習(xí)一下函數(shù)的參數(shù),函數(shù)的參數(shù)分為實(shí)參和形參。
一.什么是實(shí)際參數(shù)(實(shí)參)
首先我們來學(xué)習(xí)實(shí)參,什么是實(shí)參呢?
實(shí)際參數(shù)簡稱“實(shí)參”。
在調(diào)用有參函數(shù)時,函數(shù)名后面括號中的參數(shù)稱為“實(shí)參”,是我們真實(shí)傳給函數(shù)的參數(shù),實(shí)參可以是:常量、變量、表達(dá)式、函數(shù)等。
無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。
下面我們寫個代碼來幫助大家理解:
#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
int main()
{
int a = 20;
int b = 30;
int ret1 = add(20, 30);
printf("%d\n", ret1);
int ret2 = add(a, b);
printf("%d\n", ret2);
int ret3 = add(a + b, a - b);
printf("%d\n", ret3);
int ret4 = add(add(2, 3), 5);
printf("%d\n", ret4);
return 0;
}無論實(shí)參是何種類型的量,它們都必須有確定的值

二.什么是形式參數(shù)(形參)
那什么是形式參數(shù)呢?
形式參數(shù)是指函數(shù)名后括號中的變量,因?yàn)樾问絽?shù)只有在函數(shù)被調(diào)用的過程中才實(shí)例化(分配內(nèi)存單元),所以叫形式參數(shù)。
形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動銷毀了。因此形式參數(shù)只在函數(shù)中有效。
還來看上面的代碼:
#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
int main()
{
int a = 20;
int b = 30;
//printf("%d %d", x, y);
int ret1 = add(20, 30);
printf("%d\n", ret1);
int ret2 = add(a, b);
printf("%d\n", ret2);
int ret3 = add(a + b, a - b);
printf("%d\n", ret3);
int ret4 = add(add(2, 3), 5);
printf("%d\n", ret4);
return 0;
}1.形參只在函數(shù)中有效:
我們?nèi)绻诤瘮?shù)外部使用函數(shù)形參,這是不可行的。

2.形參在函數(shù)調(diào)用過程中才實(shí)例化(分配內(nèi)存單元)
函數(shù)調(diào)用之前,形參還未創(chuàng)建

函數(shù)調(diào)用過程中,形參才被實(shí)例化

函數(shù)調(diào)用結(jié)束,形參生命周期結(jié)束,被銷毀

三.形參與實(shí)參的關(guān)系
了解了什么是函數(shù)的形參和實(shí)參,那兩者之間有什么關(guān)系呢?
他們的關(guān)系是:
形參實(shí)例化之后其實(shí)相當(dāng)于實(shí)參的一份臨時拷貝。
這里我們對函數(shù)的實(shí)參和形參進(jìn)行分析:
我們來嘗試寫一個函數(shù)交換兩個整形變量的內(nèi)容。
#include <stdio.h>
//實(shí)現(xiàn)成函數(shù),但是不能完成任務(wù)
void Swap1(int x, int y) {
int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
int main()
{
int num1 = 1;
int num2 = 2;
Swap1(num1, num2);
printf("Swap1::num1 = %d num2 = %d\n", num1, num2);
return 0;
}
函數(shù)swap1用x,y接收了num1,num2,并把x,y進(jìn)行了交換,但是我們打印出來的num1,num2并沒有交換,為啥呢?
這是因?yàn)樵诤瘮?shù)調(diào)用時,形參x,y是實(shí)參num1,num2的一份臨時拷貝,形參和實(shí)參并沒有建立真正意義上的聯(lián)系,形參x,y是兩個獨(dú)立的變量,和實(shí)參num1,num2分別占用不同的內(nèi)存空間,在這里,形參和實(shí)參只是數(shù)值相同罷了.

所以,交換形參x,y,并不會對實(shí)參num1,num2產(chǎn)生影響?。?!
在這里,我們?nèi)绻胍_(dá)到交換實(shí)參的目的,需要進(jìn)行傳址調(diào)用,這個后面我們會詳細(xì)給大家講解,現(xiàn)在可以先簡單了解一下:
所謂傳址,就是num1,num2的地址作為參數(shù)傳過去,當(dāng)然我們就需要兩個整形指針去接收,然后,我們在函數(shù)內(nèi)部,就可以通過這兩個指針找到num1,num2,對它們進(jìn)行交換.
接下來,我們就用傳址調(diào)用的方法來實(shí)現(xiàn)一下函數(shù):
#include <stdio.h>
//正確的版本
void Swap2(int* px, int* py) {
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int num1 = 1;
int num2 = 2;
Swap2(&num1, &num2);
printf("Swap2::num1 = %d num2 = %d\n", num1, num2);
return 0;
}

這次,我們就真正達(dá)到了交換num1,num2的目的
總之,我們最后得到的結(jié)論就是,函數(shù)實(shí)參與形參的關(guān)系就是:
形參實(shí)例化之后其實(shí)相當(dāng)于實(shí)參的一份臨時拷貝。
以上就是對函數(shù)參數(shù)的介紹,歡迎大家指正?。。?/p>
到此這篇關(guān)于C語言函數(shù)參數(shù)詳解之實(shí)際參數(shù)(實(shí)參)&形式參數(shù)(形參)詳解的文章就介紹到這了,更多相關(guān)C語言實(shí)際參數(shù)與形式參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt圖形圖像開發(fā)之曲線圖表模塊QChart庫讀取/設(shè)置X軸的顯示區(qū)間
這篇文章主要介紹了Qt圖形圖像開發(fā)之曲線圖表模塊QChart庫讀取/設(shè)置X軸的顯示區(qū)間,需要的朋友可以參考下2020-03-03
C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法
本文主要介紹了C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
C語言中字符串常用函數(shù)strcat與strcpy的用法介紹
以下是對C語言中字符串常用函數(shù)strcat與strcpy的使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07
C++超詳細(xì)講解隱藏私有屬性和方法的兩種實(shí)現(xiàn)方式
為了避免因?yàn)閷㈩悗熘械乃接谐蓡T開放給類的使用方而導(dǎo)致的軟件邏輯外泄,因此需要將對外代碼中的私有成員隱藏起來,下面我們來了解一下隱藏私有屬性和方法的兩種實(shí)現(xiàn)方式2022-05-05
C語言實(shí)現(xiàn)飛機(jī)游戲(進(jìn)階版)的示例代碼
在前文中,已經(jīng)帶大家利用C語言實(shí)現(xiàn)了簡單的飛機(jī)游戲,但它還存在一些缺陷。因此,本文將給大家?guī)磉M(jìn)階版的飛機(jī)游戲,需要的可以參考一下2022-10-10

